{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-convert",
      "artifactVersion": "10.10-HF10",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.convert",
          "org.nuxeo.ecm.core.convert.api",
          "org.nuxeo.ecm.core.convert.plugins"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert",
        "id": "grp:org.nuxeo.ecm.core.convert",
        "name": "org.nuxeo.ecm.core.convert",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.ecm.core.convert",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
          "documentation": "\n    Service to handle conversions\n  \n",
          "documentationHtml": "<p>\nService to handle conversions\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.core.convert.extension.ConverterDescriptor"
              ],
              "documentation": "\n      This extension can be used to register new converters\n    \n",
              "documentationHtml": "<p>\nThis extension can be used to register new converters\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl/ExtensionPoints/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "id": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "label": "converter (org.nuxeo.ecm.core.convert.service.ConversionServiceImpl)",
              "name": "converter",
              "version": "10.10-HF10"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.core.convert.extension.GlobalConfigDescriptor"
              ],
              "documentation": "\n      This extension can be used to configure conversion service\n    \n",
              "documentationHtml": "<p>\nThis extension can be used to configure conversion service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl/ExtensionPoints/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--configuration",
              "id": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--configuration",
              "label": "configuration (org.nuxeo.ecm.core.convert.service.ConversionServiceImpl)",
              "name": "configuration",
              "version": "10.10-HF10"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
          "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
          "requirements": [],
          "resolutionOrder": 130,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl/Services/org.nuxeo.ecm.core.convert.api.ConversionService",
              "id": "org.nuxeo.ecm.core.convert.api.ConversionService",
              "overriden": false,
              "version": "10.10-HF10"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.service.ConversionServiceImpl/Services/org.nuxeo.ecm.core.convert.service.MimeTypeTranslationHelper",
              "id": "org.nuxeo.ecm.core.convert.service.MimeTypeTranslationHelper",
              "overriden": false,
              "version": "10.10-HF10"
            }
          ],
          "startOrder": 847,
          "version": "10.10-HF10",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n  <documentation>\n    Service to handle conversions\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.convert.api.ConversionService\"/>\n    <provide interface=\"org.nuxeo.ecm.core.convert.service.MimeTypeTranslationHelper\"/>\n  </service>\n\n  <extension-point name=\"converter\">\n    <documentation>\n      This extension can be used to register new converters\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.convert.extension.ConverterDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      This extension can be used to configure conversion service\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.convert.extension.GlobalConfigDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/convert-service-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that enforces the source mime type check when calling a converter. Defaults to true.\n\n      @since 10.3\n    \n",
              "documentationHtml": "<p>\nProperty that enforces the source mime type check when calling a converter. Defaults to true.\n</p><p>\n&#64;since 10.3\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.configuration/Contributions/org.nuxeo.ecm.core.convert.configuration--configuration",
              "id": "org.nuxeo.ecm.core.convert.configuration--configuration",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "10.10-HF10",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that enforces the source mime type check when calling a converter. Defaults to true.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.convert.enforceSourceMimeTypeCheck\">true</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.configuration",
          "name": "org.nuxeo.ecm.core.convert.configuration",
          "requirements": [],
          "resolutionOrder": 131,
          "services": [],
          "startOrder": 126,
          "version": "10.10-HF10",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.convert.configuration\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that enforces the source mime type check when calling a converter. Defaults to true.\n\n      @since 10.3\n    </documentation>\n    <property name=\"nuxeo.convert.enforceSourceMimeTypeCheck\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/properties-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-convert-10.10-HF10.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert",
      "id": "org.nuxeo.ecm.core.convert",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_191\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.4.2.qualifier\r\nExport-Package: org.nuxeo.ecm.core.convert.cache,org.nuxeo.ecm.core.co\r\n nvert.extension,org.nuxeo.ecm.core.convert.service\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core\r\nBundle-Name: org.nuxeo.ecm.core.convert\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nEclipse-BuddyPolicy: dependent\r\nNuxeo-Component: OSGI-INF/convert-service-framework.xml,OSGI-INF/prope\r\n rties-contrib.xml\r\nImport-Package: org.apache.commons.logging,org.nuxeo.common.utils,org.\r\n nuxeo.common.xmap.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo.e\r\n cm.core.api;api=split,org.nuxeo.ecm.core.api.blobholder,org.nuxeo.ecm\r\n .core.api.impl.blob,org.nuxeo.ecm.core.convert.api,org.nuxeo.runtime.\r\n api,org.nuxeo.runtime.model,org.osgi.framework\r\nBundle-SymbolicName: org.nuxeo.ecm.core.convert\r\n\r\n",
      "maxResolutionOrder": 131,
      "minResolutionOrder": 130,
      "packages": [
        "nuxeo-10.10-HF02",
        "nuxeo-10.10-HF03",
        "nuxeo-10.10-HF10"
      ],
      "requirements": [],
      "version": "10.10-HF10"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-audit-core",
      "artifactVersion": "10.10-HF33",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.audit.api",
          "org.nuxeo.ecm.platform.audit.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit",
        "id": "grp:org.nuxeo.ecm.platform.audit",
        "name": "org.nuxeo.ecm.platform.audit",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.ecm.platform.audit",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.persistence.PersistenceComponent--hibernate",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.persistence/Contributions/org.nuxeo.ecm.platform.audit.service.persistence--hibernate",
              "id": "org.nuxeo.ecm.platform.audit.service.persistence--hibernate",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.persistence.PersistenceComponent",
                "name": "org.nuxeo.ecm.core.persistence.PersistenceComponent",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"hibernate\" target=\"org.nuxeo.ecm.core.persistence.PersistenceComponent\">\n    <hibernateConfiguration name=\"nxaudit-logs\">\n      <datasource>nxaudit-logs</datasource>\n      <properties>\n        <property name=\"hibernate.hbm2ddl.auto\">update</property>\n      </properties>\n    </hibernateConfiguration>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.persistence",
          "name": "org.nuxeo.ecm.platform.audit.service.persistence",
          "requirements": [],
          "resolutionOrder": 290,
          "services": [],
          "startOrder": 296,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.service.persistence\">\n\n  <extension target=\"org.nuxeo.ecm.core.persistence.PersistenceComponent\"\n    point=\"hibernate\">\n    <hibernateConfiguration name=\"nxaudit-logs\">\n      <datasource>nxaudit-logs</datasource>\n      <properties>\n        <property name=\"hibernate.hbm2ddl.auto\">update</property>\n      </properties>\n    </hibernateConfiguration>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxaudit-persistence-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.core.types-contrib/Contributions/org.nuxeo.ecm.platform.audit.core.types-contrib--schema",
              "id": "org.nuxeo.ecm.platform.audit.core.types-contrib--schema",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"basicauditsearch\" prefix=\"bas\" src=\"schemas/basicauditsearch.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.core.types-contrib/Contributions/org.nuxeo.ecm.platform.audit.core.types-contrib--doctype",
              "id": "org.nuxeo.ecm.platform.audit.core.types-contrib--doctype",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"ForceAudit\"/>\n\n    <doctype extends=\"Document\" name=\"BasicAuditSearch\">\n      <schema name=\"basicauditsearch\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.core.types-contrib",
          "name": "org.nuxeo.ecm.platform.audit.core.types-contrib",
          "requirements": [],
          "resolutionOrder": 291,
          "services": [],
          "startOrder": 291,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.audit.core.types-contrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"basicauditsearch\" prefix=\"bas\" src=\"schemas/basicauditsearch.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"ForceAudit\" />\n\n    <doctype name=\"BasicAuditSearch\" extends=\"Document\">\n      <schema name=\"basicauditsearch\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"common\" />\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-type-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.directoryContrib/Contributions/org.nuxeo.audit.directoryContrib--directories",
              "id": "org.nuxeo.audit.directoryContrib--directories",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-vocabulary\" name=\"eventTypes\">\n      <dataFile>directories/event-types.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n    <directory extends=\"template-vocabulary\" name=\"eventCategories\">\n      <dataFile>directories/event-categories.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.directoryContrib",
          "name": "org.nuxeo.audit.directoryContrib",
          "requirements": [],
          "resolutionOrder": 292,
          "services": [],
          "startOrder": 37,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.directoryContrib\">\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"eventTypes\" extends=\"template-vocabulary\">\n      <dataFile>directories/event-types.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n    <directory name=\"eventCategories\" extends=\"template-vocabulary\">\n      <dataFile>directories/event-categories.csv</dataFile>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/directories-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.PageProviderservice.contrib/Contributions/org.nuxeo.ecm.platform.audit.PageProviderservice.contrib--providers",
              "id": "org.nuxeo.ecm.platform.audit.PageProviderservice.contrib--providers",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER_OLD\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <fixedPart>\n          log.docUUID = ?\n        </fixedPart>\n        <predicate operator=\"BETWEEN\" parameter=\"log.eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.eventId\">\n          <field name=\"eventId\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"true\" column=\"log.eventDate\"/>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\" name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <fixedPart>\n          log.eventId = 'user_created' OR log.eventId = 'group_created'\n        </fixedPart>\n      </whereClause>\n      <sort ascending=\"false\" column=\"log.eventDate\"/>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.provider.LatestCreatedUsersOrGroupsPageProvider\" name=\"LATEST_CREATED_USERS_OR_GROUPS_PROVIDER\">\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.audit.api.document.DocumentHistoryPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <predicate operator=\"BETWEEN\" parameter=\"log.eventDate\">\n          <field name=\"startDate\" schema=\"basicauditsearch\"/>\n          <field name=\"endDate\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.category\">\n          <field name=\"eventCategory\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.category\">\n          <field name=\"eventCategories\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.eventId\">\n          <field name=\"eventId\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.eventId\">\n          <field name=\"eventIds\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"log.principalName\">\n          <field name=\"principalName\" schema=\"basicauditsearch\"/>\n        </predicate>\n        <predicate operator=\"IN\" parameter=\"log.principalName\">\n          <field name=\"principalNames\" schema=\"basicauditsearch\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"log.eventDate\"/>\n      <sort ascending=\"false\" column=\"log.id\"/>\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.PageProviderservice.contrib",
          "name": "org.nuxeo.ecm.platform.audit.PageProviderservice.contrib",
          "requirements": [],
          "resolutionOrder": 293,
          "services": [],
          "startOrder": 288,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.audit.PageProviderservice.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <genericPageProvider name=\"DOCUMENT_HISTORY_PROVIDER_OLD\"\n      class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <fixedPart>\n          log.docUUID = ?\n        </fixedPart>\n        <predicate parameter=\"log.eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventId\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"true\" />\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\"\n      class=\"org.nuxeo.ecm.platform.audit.api.AuditPageProvider\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <fixedPart>\n          log.eventId = 'user_created' OR log.eventId = 'group_created'\n        </fixedPart>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"false\" />\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"LATEST_CREATED_USERS_OR_GROUPS_PROVIDER\"\n      class=\"org.nuxeo.ecm.platform.audit.provider.LatestCreatedUsersOrGroupsPageProvider\">\n    </genericPageProvider>\n\n    <genericPageProvider name=\"DOCUMENT_HISTORY_PROVIDER\"\n      class=\"org.nuxeo.ecm.platform.audit.api.document.DocumentHistoryPageProvider\">\n      <whereClause docType=\"BasicAuditSearch\">\n        <predicate parameter=\"log.eventDate\" operator=\"BETWEEN\">\n          <field schema=\"basicauditsearch\" name=\"startDate\" />\n          <field schema=\"basicauditsearch\" name=\"endDate\" />\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventCategory\" />\n        </predicate>\n        <predicate parameter=\"log.category\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventCategories\" />\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"eventId\" />\n        </predicate>\n        <predicate parameter=\"log.eventId\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"eventIds\" />\n        </predicate>\n        <predicate parameter=\"log.principalName\" operator=\"=\">\n          <field schema=\"basicauditsearch\" name=\"principalName\" />\n        </predicate>\n        <predicate parameter=\"log.principalName\" operator=\"IN\">\n          <field schema=\"basicauditsearch\" name=\"principalNames\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"log.eventDate\" ascending=\"false\" />\n      <sort column=\"log.id\" ascending=\"false\" />\n      <pageSize>10</pageSize>\n      <maxPageSize>1000</maxPageSize>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentation": "\n    Core IO registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO registered marshallers set.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.io.marshallers/Contributions/org.nuxeo.ecm.platform.audit.io.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.audit.io.marshallers--marshallers",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryCSVWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.io.marshallers",
          "name": "org.nuxeo.ecm.platform.audit.io.marshallers",
          "requirements": [],
          "resolutionOrder": 295,
          "services": [],
          "startOrder": 293,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.io.marshallers\" version=\"1.0.0\">\n  <documentation>\n    Core IO registered marshallers set.\n  </documentation>\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.audit.io.LogEntryCSVWriter\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentation": "Contribute the search event to the Audit configuration :\n    this is\n    only safe to do so when the ES backend if used for Audit\n  \n",
          "documentationHtml": "<p>\nContribute the search event to the Audit configuration :\nthis is\nonly safe to do so when the ES backend if used for Audit\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.user.contrib/Contributions/org.nuxeo.ecm.platform.audit.user.contrib--event",
              "id": "org.nuxeo.ecm.platform.audit.user.contrib--event",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <event name=\"user_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"user_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"user_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"group_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"group_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"group_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\"/>\n      </extendedInfos>\n    </event>\n    <event name=\"retentionActiveChanged\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retentionActive}\" key=\"retentionActive\"/>\n      </extendedInfos>\n    </event>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.user.contrib",
          "name": "org.nuxeo.ecm.platform.audit.user.contrib",
          "requirements": [],
          "resolutionOrder": 296,
          "services": [],
          "startOrder": 297,
          "version": "10.10-HF33",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.audit.user.contrib\" version=\"1.0\">\n\n  <documentation>Contribute the search event to the Audit configuration :\n    this is\n    only safe to do so when the ES backend if used for Audit\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\"\n    point=\"event\">\n    <event name=\"user_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"user_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"user_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"group_created\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"group_deleted\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"group_modified\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.id}\" key=\"id\" />\n      </extendedInfos>\n    </event>\n    <event name=\"retentionActiveChanged\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retentionActive}\" key=\"retentionActive\" />\n      </extendedInfos>\n    </event>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-audit-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "declaredStartOrder": 51,
          "documentation": "\n    Service that deals with audit.\n    <p/>\n\n    Most of the work is done at EJB layer though.\n\n    This supports JMS events based\n    notifications on a dedicated topic.\n\n    @version 1.0\n    @author Julien Anguenot\n  \n",
          "documentationHtml": "<p>\nService that deals with audit.\n</p><p>\nMost of the work is done at EJB layer though.\n</p><p>\nThis supports JMS events based\nnotifications on a dedicated topic.\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.EventDescriptor"
              ],
              "documentation": "\n      This service registers auditable events.\n      <p/>\n\n      Registered events are dummy strings for now.\n      <p/>\n\n      This service is used to filter auditable events from the JMS topic based\n      on their names. The following XML snipset give figures out how the default\n      event types are selected for auditing.\n\n      <programlisting>\n    <extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n        <event name=\"documentCreated\"/>\n        <event name=\"documentCreatedByCopy\"/>\n        <event name=\"documentDuplicated\"/>\n        <event name=\"documentMoved\"/>\n        <event name=\"documentRemoved\"/>\n        <event name=\"documentModified\"/>\n        <event name=\"documentLocked\"/>\n        <event name=\"documentUnlocked\"/>\n        <event name=\"documentSecurityUpdated\"/>\n        <event name=\"lifecycle_transition_event\"/>\n        <event name=\"documentTrashed\"/>\n        <event name=\"documentUntrashed\"/>\n    </extension>\n</programlisting>\n",
              "documentationHtml": "<p>\nThis service registers auditable events.\n</p><p>\nRegistered events are dummy strings for now.\n</p><p>\nThis service is used to filter auditable events from the JMS topic based\non their names. The following XML snipset give figures out how the default\nevent types are selected for auditing.\n</p><p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "label": "event (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "event",
              "version": "10.10-HF33"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.ExtendedInfoDescriptor"
              ],
              "documentation": "\n      This service registered extended info mappings.\n\n      <p/>\n\n      This service is used to evaluate EL expression using document as context\n      regist:ering results into a map indexed by names.\n    \n",
              "documentationHtml": "<p>\nThis service registered extended info mappings.\n</p><p>\nThis service is used to evaluate EL expression using document as context\nregist:ering results into a map indexed by names.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--extendedInfo",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--extendedInfo",
              "label": "extendedInfo (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "extendedInfo",
              "version": "10.10-HF33"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AdapterDescriptor"
              ],
              "documentation": "\n      register the adapter that will be injected in EL context\n    \n",
              "documentationHtml": "<p>\nregister the adapter that will be injected in EL context\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--adapter",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--adapter",
              "label": "adapter (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "adapter",
              "version": "10.10-HF33"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditBackendDescriptor"
              ],
              "documentation": "\n      Allows to register a backend implementation for the Audit Service\n    \n",
              "documentationHtml": "<p>\nAllows to register a backend implementation for the Audit Service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "label": "backend (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "backend",
              "version": "10.10-HF33"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditStorageDescriptor"
              ],
              "documentation": "\n      Allows to register a storage implementation for the Audit Service\n    \n",
              "documentationHtml": "<p>\nAllows to register a storage implementation for the Audit Service\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--storage",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--storage",
              "label": "storage (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "storage",
              "version": "10.10-HF33"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.ecm.platform.audit.service.extension.AuditBulkerDescriptor"
              ],
              "documentation": "\n       CAUTION: Deprecated since 10.10-HF33, audit bulker is now handled with nuxeo-stream, no replacement\n      Allows to configure bulk processing\n    \n",
              "documentationHtml": "<p>\nCAUTION: Deprecated since 10.10-HF33, audit bulker is now handled with nuxeo-stream, no replacement\nAllows to configure bulk processing\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/ExtensionPoints/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--bulk",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--bulk",
              "label": "bulk (org.nuxeo.ecm.platform.audit.service.NXAuditEventsService)",
              "name": "bulk",
              "version": "10.10-HF33"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Those default auditable events match Nuxeo core base events.\n      <p/>\n\n      If you are sending new Nuxeo core events and want them audited, this is\n      the place to declare them NXAudit side.\n    \n",
              "documentationHtml": "<p>\nThose default auditable events match Nuxeo core base events.\n</p><p>\nIf you are sending new Nuxeo core events and want them audited, this is\nthe place to declare them NXAudit side.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <documentation>\n      Those default auditable events match Nuxeo core base events.\n      <p/>\n      If you are sending new Nuxeo core events and want them audited, this is\n      the place to declare them NXAudit side.\n    </documentation>\n\n    <event name=\"documentCreated\"/>\n    <event name=\"documentCreatedByCopy\"/>\n    <event name=\"documentDuplicated\"/>\n    <event name=\"documentMoved\"/>\n    <event name=\"documentRemoved\"/>\n    <event name=\"documentModified\"/>\n    <event name=\"documentLocked\"/>\n    <event name=\"documentUnlocked\"/>\n    <event name=\"documentSecurityUpdated\"/>\n    <event name=\"retentionActiveChanged\"/>\n    <event name=\"lifecycle_transition_event\"/>\n    <event name=\"loginSuccess\"/>\n    <event name=\"loginFailed\"/>\n    <event name=\"logout\"/>\n    <event name=\"documentCheckedIn\"/>\n    <event name=\"versionRemoved\"/>\n    <event name=\"documentProxyPublished\"/>\n    <event name=\"sectionContentPublished\"/>\n    <event name=\"documentRestored\"/>\n    <event name=\"download\"/>\n    <event name=\"documentTrashed\"/>\n    <event name=\"documentUntrashed\"/>\n    <event name=\"addedToCollection\"/>\n    <event name=\"removedFromCollection\"/>\n    <event name=\"afterMakeRecord\"/>\n    <event name=\"afterSetRetention\"/>\n    <event name=\"afterExtendRetention\"/>\n    <event name=\"retentionExpired\"/>\n    <event name=\"afterSetLegalHold\"/>\n    <event name=\"afterRemoveLegalHold\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--backend",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"backend\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n\n    <backend class=\"org.nuxeo.ecm.platform.audit.service.DefaultAuditBackend\">\n       <require>org.nuxeo.ecm.core.persistence.PersistenceComponent</require>\n    </backend>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--listener",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--listener",
              "registrationOrder": 45,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.audit.listener.StreamAuditEventListener\" name=\"auditLoggerListener\" postCommit=\"false\" priority=\"500\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--logConfig",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--logConfig",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--logConfig",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"logConfig\" target=\"org.nuxeo.runtime.stream.service\">\n    <logConfig name=\"audit\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Contributions/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--streamProcessor",
              "id": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--streamProcessor",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.platform.audit.impl.StreamAuditWriter\" defaultCodec=\"legacy\" defaultConcurrency=\"1\" defaultPartitions=\"1\" enabled=\"true\" logConfig=\"audit\" name=\"auditLogWriter\">\n      <policy batchCapacity=\"25\" batchThreshold=\"500ms\" continueOnFailure=\"false\" delay=\"1s\" maxDelay=\"60s\" maxRetries=\"20\" name=\"AuditLogWriter\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "requirements": [
            "org.nuxeo.ecm.platform.audit.service.persistence",
            "org.nuxeo.runtime.metrics.MetricsService"
          ],
          "resolutionOrder": 835,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.service.AuditBackend",
              "id": "org.nuxeo.ecm.platform.audit.service.AuditBackend",
              "overriden": false,
              "version": "10.10-HF33"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.AuditReader",
              "id": "org.nuxeo.ecm.platform.audit.api.AuditReader",
              "overriden": false,
              "version": "10.10-HF33"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.AuditLogger",
              "id": "org.nuxeo.ecm.platform.audit.api.AuditLogger",
              "overriden": false,
              "version": "10.10-HF33"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.Logs",
              "id": "org.nuxeo.ecm.platform.audit.api.Logs",
              "overriden": false,
              "version": "10.10-HF33"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService/Services/org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader",
              "id": "org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader",
              "overriden": false,
              "version": "10.10-HF33"
            }
          ],
          "startOrder": 808,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n\n  <require>org.nuxeo.runtime.metrics.MetricsService</require>\n\n  <documentation>\n    Service that deals with audit.\n    <p />\n    Most of the work is done at EJB layer though.\n\n    This supports JMS events based\n    notifications on a dedicated topic.\n\n    @version 1.0\n    @author Julien Anguenot\n  </documentation>\n\n  <!-- needed so that activation has access to persistence -->\n  <require>org.nuxeo.ecm.platform.audit.service.persistence</require>\n\n  <implementation class=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.audit.service.AuditBackend\"/>\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.AuditReader\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.AuditLogger\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.Logs\" />\n    <provide interface=\"org.nuxeo.ecm.platform.audit.api.DocumentHistoryReader\" />\n  </service>\n\n  <extension-point name=\"event\">\n    <documentation>\n      This service registers auditable events.\n      <p />\n      Registered events are dummy strings for now.\n      <p />\n      This service is used to filter auditable events from the JMS topic based\n      on their names. The following XML snipset give figures out how the default\n      event types are selected for auditing.\n\n      <programlisting>\n        <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\"\n          point=\"event\">\n          <event name=\"documentCreated\" />\n          <event name=\"documentCreatedByCopy\" />\n          <event name=\"documentDuplicated\" />\n          <event name=\"documentMoved\" />\n          <event name=\"documentRemoved\" />\n          <event name=\"documentModified\" />\n          <event name=\"documentLocked\" />\n          <event name=\"documentUnlocked\" />\n          <event name=\"documentSecurityUpdated\" />\n          <event name=\"lifecycle_transition_event\" />\n          <event name=\"documentTrashed\" />\n          <event name=\"documentUntrashed\" />\n        </extension>\n      </programlisting>\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.EventDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"extendedInfo\">\n\n    <documentation>\n      This service registered extended info mappings.\n\n      <p />\n      This service is used to evaluate EL expression using document as context\n      regist:ering results into a map indexed by names.\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.platform.audit.service.extension.ExtendedInfoDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"adapter\">\n\n    <documentation>\n      register the adapter that will be injected in EL context\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AdapterDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"backend\">\n\n    <documentation>\n      Allows to register a backend implementation for the Audit Service\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditBackendDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"storage\">\n\n    <documentation>\n      Allows to register a storage implementation for the Audit Service\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditStorageDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"bulk\">\n     <documentation>\n       CAUTION: Deprecated since 10.10-HF33, audit bulker is now handled with nuxeo-stream, no replacement\n      Allows to configure bulk processing\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.audit.service.extension.AuditBulkerDescriptor\"/>\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\"\n    point=\"event\">\n    <documentation>\n      Those default auditable events match Nuxeo core base events.\n      <p />\n      If you are sending new Nuxeo core events and want them audited, this is\n      the place to declare them NXAudit side.\n    </documentation>\n\n    <event name=\"documentCreated\" />\n    <event name=\"documentCreatedByCopy\" />\n    <event name=\"documentDuplicated\" />\n    <event name=\"documentMoved\" />\n    <event name=\"documentRemoved\" />\n    <event name=\"documentModified\" />\n    <event name=\"documentLocked\" />\n    <event name=\"documentUnlocked\" />\n    <event name=\"documentSecurityUpdated\" />\n    <event name=\"retentionActiveChanged\" />\n    <event name=\"lifecycle_transition_event\" />\n    <event name=\"loginSuccess\" />\n    <event name=\"loginFailed\" />\n    <event name=\"logout\" />\n    <event name=\"documentCheckedIn\" />\n    <event name=\"versionRemoved\" />\n    <event name=\"documentProxyPublished\" />\n    <event name=\"sectionContentPublished\" />\n    <event name=\"documentRestored\" />\n    <event name=\"download\" />\n    <event name=\"documentTrashed\" />\n    <event name=\"documentUntrashed\" />\n    <event name=\"addedToCollection\" />\n    <event name=\"removedFromCollection\" />\n    <event name=\"afterMakeRecord\" />\n    <event name=\"afterSetRetention\" />\n    <event name=\"afterExtendRetention\" />\n    <event name=\"retentionExpired\" />\n    <event name=\"afterSetLegalHold\" />\n    <event name=\"afterRemoveLegalHold\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\"\n    point=\"backend\">\n\n    <backend class=\"org.nuxeo.ecm.platform.audit.service.DefaultAuditBackend\">\n       <require>org.nuxeo.ecm.core.persistence.PersistenceComponent</require>\n    </backend>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"auditLoggerListener\" async=\"false\" postCommit=\"false\" priority=\"500\"\n              class=\"org.nuxeo.ecm.platform.audit.listener.StreamAuditEventListener\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"logConfig\">\n    <logConfig name=\"${nuxeo.stream.audit.log.config:=audit}\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"auditLogWriter\" logConfig=\"${nuxeo.stream.audit.log.config:=audit}\"\n                     defaultConcurrency=\"1\" defaultPartitions=\"1\" defaultCodec=\"${nuxeo.stream.audit.log.codec:=legacy}\"\n                     class=\"org.nuxeo.ecm.platform.audit.impl.StreamAuditWriter\"\n                     enabled=\"${nuxeo.stream.audit.enabled:=true}\">\n      <policy name=\"AuditLogWriter\" batchCapacity=\"${nuxeo.stream.audit.batch.size:=10}\"\n              batchThreshold=\"${nuxeo.stream.audit.batch.threshold.ms:=50}ms\"\n              maxRetries=\"20\" delay=\"1s\" maxDelay=\"60s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxaudit-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-audit-core-10.10-HF33.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit",
      "id": "org.nuxeo.ecm.platform.audit",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_265\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.audit\r\nBundle-Category: web,stateful\r\nBundle-ActivationPolicy: lazy\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nImport-Package: de.odysseus.el;version=\"2.1.2\",javax.annotation;versio\r\n n=\"1.0\",javax.el,javax.management,javax.persistence,org.apache.common\r\n s.lang.builder,org.apache.commons.logging,org.nuxeo.common.xmap.annot\r\n ation,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,o\r\n rg.nuxeo.ecm.core.api.event,org.nuxeo.ecm.core.api.repository,org.nux\r\n eo.ecm.core.api.security,org.nuxeo.ecm.core.event,org.nuxeo.ecm.core.\r\n event.impl,org.nuxeo.ecm.core.persistence,org.nuxeo.ecm.directory;api\r\n =split,org.nuxeo.ecm.platform.audit.api,org.nuxeo.ecm.platform.audit.\r\n api.query,org.nuxeo.ecm.platform.el,org.nuxeo.runtime.api,org.nuxeo.r\r\n untime.management,org.nuxeo.runtime.model,org.osgi.framework;version=\r\n \"1.5.0\"\r\nNuxeo-Component: OSGI-INF/nxaudit-service.xml,OSGI-INF/nxaudit-persist\r\n ence-config.xml,OSGI-INF/core-type-contrib.xml,OSGI-INF/directories-c\r\n ontrib.xml,OSGI-INF/pageprovider-contrib.xml,OSGI-INF/marshallers-con\r\n trib.xml, OSGI-INF/user-audit-contrib.xml\r\nExport-Package: org.nuxeo.ecm.platform.audit.listener,org.nuxeo.ecm.pl\r\n atform.audit.service,org.nuxeo.ecm.platform.audit.service.extension,o\r\n rg.nuxeo.ecm.platform.audit.service.management\r\nBundle-Name: NXAudit Core\r\nBundle-ClassPath: .\r\nBundle-Localization: plugin\r\nPrivate-Package: .\r\n\r\n",
      "maxResolutionOrder": 835,
      "minResolutionOrder": 290,
      "packages": [
        "nuxeo-10.10-HF01",
        "nuxeo-10.10-HF02",
        "nuxeo-10.10-HF03",
        "nuxeo-10.10-HF04",
        "nuxeo-10.10-HF05",
        "nuxeo-10.10-HF06",
        "nuxeo-10.10-HF07",
        "nuxeo-10.10-HF08",
        "nuxeo-10.10-HF09",
        "nuxeo-10.10-HF10",
        "nuxeo-10.10-HF11",
        "nuxeo-10.10-HF12",
        "nuxeo-10.10-HF13",
        "nuxeo-10.10-HF14",
        "nuxeo-10.10-HF15",
        "nuxeo-10.10-HF16",
        "nuxeo-10.10-HF17",
        "nuxeo-10.10-HF18",
        "nuxeo-10.10-HF19",
        "nuxeo-10.10-HF20",
        "nuxeo-10.10-HF21",
        "nuxeo-10.10-HF22",
        "nuxeo-10.10-HF23",
        "nuxeo-10.10-HF24",
        "nuxeo-10.10-HF25",
        "nuxeo-10.10-HF26",
        "nuxeo-10.10-HF27",
        "nuxeo-10.10-HF28",
        "nuxeo-10.10-HF29",
        "nuxeo-10.10-HF30",
        "nuxeo-10.10-HF31",
        "nuxeo-10.10-HF32",
        "nuxeo-10.10-HF33"
      ],
      "requirements": [],
      "version": "10.10-HF33"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-diff-content",
      "artifactVersion": "10.10-HF29",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.diff.content",
          "org.nuxeo.diff.core",
          "org.nuxeo.diff.jsf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff",
        "id": "grp:org.nuxeo.diff",
        "name": "org.nuxeo.diff",
        "parentIds": [
          "grp:org.nuxeo.ecm"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Diff\n\nThis repo hosts the source code of a plugin for Nuxeo Platform that allows to render a diff between two documents or two versions of a document.\nThe comparison takes into account all the properties shared by the documents, which means that if a comparison is done between two documents of a different type, only the schemas in common will be \"diffed\".\nThe comparison also takes into account blob-type properties.\n\n\n## Building and deploying\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Diff Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-diff).\n\n## QA results\n\n[![Build Status](https://qa.nuxeo.org/jenkins/buildStatus/icon?job=master/addons_nuxeo-diff-master)](https://qa.nuxeo.org/jenkins/job/master/job/addons_nuxeo-diff-master/)\n\n## Configuring\n\n### Diff display\n\nThe `DiffDisplayService` offers several extension points to configure the document diff display.\nMost of the code samples exposed here can be found in the [diff-display-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-display-contrib.xml) and [diff-widgets-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-widgets-contrib.xml) files.\n\n#### Configuring groups of properties to display with the diffDisplay extension point.\n\nA `diffDisplay` contribution represents a number of `diffBlocks` that you want to display when asking for a document comparison.\nIt is bound to a document type.\nA `diffBlock` contribution represents a number of properties (fields) that you want to display (see next section).\n\nWhen asking for the comparison between 2 versions of a document, the `diffDisplay` bound to the document type or a super type is used.\nIf no `diffDisplay` is found for this type or a super type a fall back is done on the default diff display mode: one block per document schema and for each block all the fields of the schema that are different.\n\n*Beware that in this case the order of the schemas and of the fields is undefined.*\n\nWhen asking for the comparison between 2 documents:\n- If they are of the same type: if  a `diffDisplay` is found for this type or a super type then it is used, else a fall back is done on the default diff display mode.\n- If they are of different types: if  a `diffDisplay` is found for a common super type then it is used, else a fall back is done on the default diff display mode.\n\nFor example, this is the `diffDisplay` contribution bound to the _File_ type:\n```xml\n<diffDisplay type=\"File\">\n  <diffBlocks>\n    <diffBlock name=\"heading\" />\n    <diffBlock name=\"dublincore\" />\n    <diffBlock name=\"files\" />\n  </diffDisplay>\n</diffBlocks>\n```\n\n_Note that the order of the diffBlocks is taken into account when rendering the diff display._\n\n#### Configuring a group of properties to display with the diffBlock extension point\n\nA `diffBlock` contribution represents a number of `fields` that you want to display. It is rendered as a foldable box.\nThe `label` attribute of a `diffBlock` contribution is used as the title of the foldable box.\nA `field` is defined by its `schema` and its `name`.\n\nFor example, this is the \"heading\" `diffBlock` contribution:\n```xml\n<diffBlock name=\"heading\" label=\"label.diffBlock.heading\">\n  <fields>\n    <field schema=\"dublincore\" name=\"title\" />\n    <field schema=\"dublincore\" name=\"description\" />\n  </fields>\n</diffBlock>\n```\n_Note that the order of the fields is taken into account when rendering the diff block._\n\nFor complex properties, you can contribute inside the `field` element the property `items` that you want to display:\n```xml\n<field schema=\"complextypes\" name=\"complex\">\n  <items>\n    <item name=\"stringItem\" />\n    <item name=\"thirdItem\" />\n    <item name=\"fourthItem\" />\n  </items>\n</field>\n```\n\n_Note that the order of the items is taken into account when rendering the field._\n\nThis is used for the `files` field of the `files` diff block:\n```xml\n<field schema=\"files\" name=\"files\">\n  <items>\n    <!-- Display the file only, not the filename which is managed\n         by the file widget type -->\n    <item name=\"file\" displayContentDiffLinks=\"true\" />\n  </items>\n</field>\n```\n\nIf no `items` are specified, all the property items are displayed.\n\nFor content properties (that hold a blob) or string ones you can set the `displayContentDiffLinks` attribute to `true` on a `field` or an `item` to display the content diff links.\nThese links will open a fancybox showing the detailed content diff using the usual green and red colors to distinguish the added/removed parts of the content.\nFor now, 2 links are displayed: _Textual diff_ based on a text conversion and _Html diff_ based on an html conversion (keeps the content layout).\n\n#### Configuring property widgets with the widgets extension point\n\n##### Principle\n\nWhen rendering a `diffBlock`, the `DiffDisplayService` builds a layout definition on the fly, including a layout row for each `field` of the `diffBlock`.\nEach row contains a widget definition for the `field`, and the layout template renders 2 instances of this widget definition: one for the left document and one for the right document.\nThe content diff links, if displayed, are also rendered by a widget inside the layout row.\n\nHow is the widget definition built for a given `field`?\nA lookup is done in the `LayoutStore` service to find a specific widget definition named with the xpath of the property.\nIf such a definition is not found, a lookup is done to find a generic widget definition named with the type of the property.\n\nThis allows you to only contribute a specific widget definition if the generic one doesn't match your needs for a given field, typically if you need a custom template, label or custom properties.\n\n##### Example\n\nLets say we have contributed the following `diffBlock`:\n```xml\n<diffBlock name=\"myCustomBlock\" label=\"label.diffBlock.custom\">\n  <fields>\n    <field schema=\"file\" name=\"content\" />\n    <field schema=\"dublincore\" name=\"title\" />\n  </fields>\n</diffBlock>\n```\n\nand the following widgets to the `widgets` extension point of the `org.nuxeo.ecm.platform.forms.layout.LayoutStore` component:\n```xml\n<extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n  point=\"widgets\">\n\n  <widget name=\"file:content\" type=\"file\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <labels>\n      <label mode=\"any\">label.summary.download.file</label>\n    </labels>\n    <translated>true</translated>\n    <properties mode=\"any\">\n    </properties>\n  </widget>\n\n  <widget name=\"string\" type=\"template\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <properties mode=\"any\">\n      <property name=\"widgetType\">text</property>\n      <property name=\"template\">\n        /widgets/generic_diff_widget_template.xhtml\n      </property>\n    </properties>\n  </widget>\n\n</extension>\n```\n\nWhen rendering the \"myCustomBlock\" `diffBlock`, the `DiffDisplayService` will:\n\n- Look for a specific widget definition named \"file:content\" in the `LayoutStore`, find it and use it for the \"file:content\" field.\n\n- Look for a specific widget definition named \"dublincore:title\" in the `LayoutStore`, won't find it and therefore will look for a generic widget definition named with the field type, ie. \"string\", find it and use it for the dublincore:title field.\n\nIn this use case, the \"string\" generic widget definition is sufficient to display the \"dublincore:title\" field.\nIt uses a widget of type \"text\" with \"label.dublincore.title\" as a label and \"dublincore:title\" as a field definition.\nWe can easily understand here the interest of generic widgets: once you have the type and xpath of a property, the matching widget definition can be computed on the fly using the property type to guess the widget type (\"string\" => \"text\", \"date\" => \"datetime\", etc.) and the property xpath for the field definition and label.\n\nThe \"file:content\" specific widget definition is contributed here to use a custom label \"label.summary.download.file\" instead of the one that would have been generated for the \"content\" generic widget definition: \"label.file.content\".\n\n_Note that in both cases (generic and specific) you don't need to define the widget field definitions since they are automatically computed from the property xpath, except in particular cases like \"note:note\" where the \"mime-type\" field is needed._\n\n##### List and complex properties\n\nYou might already know that the widgets used to display list and complex properties have subwidgets.\nIn the case of a list property, a subwidget is needed for the list items; in the case of a complex property, a subwidget is needed for each item of the complex property.\nThe lookup done by the `DiffDisplayService_` for the first-level widgets is also done recursively for the subwidgets!\n\n###### List property\n\nFor a list property, lets take the example of \"dublincore:contributors\", which is a string list.\n\n- To display the list, nothing special is needed so the \"scalarList\" generic widget definition can be used.\n\n- To display a list item (a contributor, which is of type \"string\"), the \"string\" generic widget definition doesn't match our needs: it would display the contributor's username whereas we want to display its fullname (firstname lastname).\nSo we need a specific widget definition for the list items subwidget to use a custom template able to display the contributor's fullname.\nThe name of this widget definition must match the xpath of the list item property, ie. \"dublincore:contributors/item\".\n\nTherefore, two widget definitions are involved:\n\n- The \"scalarList\" generic widget definition:\n\n```xml\n<widget name=\"scalarList\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"displayAllItems\">false</property>\n    <property name=\"displayItemIndexes\">true</property>\n    <property name=\"template\">\n      /widgets/list_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"dublincore:contributors/item\" specific widget definition:\n\n```xml\n<widget name=\"dublincore:contributors/item\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.dublincore.contributors.item</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"template\">/widgets/contributors_item_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n###### Complex property\n\nFor a complex property, lets take the example of a \"complextypes:complex\" property with two items \"stringItem\" and \"directoryItem\".\n\"stringItem\" is a simple string, but \"directoryItem\" is a string that needs to be bound to the \"myDirectory\" directory.\n\n- To display the complex property, nothing special is needed so the \"complex\" generic widget definition can be used.\n\n- To display the \"directoryItem\" item, the \"string\" generic widget definition doesn't match our needs: it would display the directory entry code stored in the backend whereas we want to display its label.\nSo we need a specific widget definition for the \"directoryItem\" subwidget to use the \"selectOneDirectory\" widget type bound to the \"myDirectory\" directory.\nAs for a list item, the name of this widget definition must match the xpath of the complex property item, ie. \"complextypes:complex/directoryItem\".\n\nTherefore, two widget definitions are involved:\n\n- The \"complex\" generic widget definition:\n\n```xml\n<widget name=\"complex\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"template\">\n      /widgets/complex_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"complextypes:complex/directoryItem\" specific widget definition:\n\n```xml\n<widget name=\"complextypes:complex/directoryItem\" type=\"selectOneDirectory\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.complextypes.complex.directoryItem</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"directoryName\">myDirectory</property>\n    <property name=\"localize\">true</property>\n    <property name=\"ordering\">ordering,label</property>\n  </properties>\n</widget>\n```\n\n###### Useful widget properties\n\nYou can use the following properties on a list widget definition (typically \"scalarList\", \"complexList\" or \"files:files\"):\n\n`<property name=\"displayAllItems\">[true|false]</property>`\nIf set to `true`, all the list items will be displayed, otherwise only the different ones will be.\n\n`<property name=\"displayItemIndexes\">[true|false]</property>`\nIf set to `true`, a subwidget will be added to the widget definition to display the list item indexes.\n\nYou can use the following property on a complex widget definition (typically \"complex\"):\n\n`<property name=\"display\">[inline|*]</property>`\nIf set to `inline` the complex items will be displayed as a table with one line and one column per item, otherwise as a table with one column and one line per item.\n\n##### About the value bound to the diff widgets\n\nIf you take a look at [layout_diff_template.xhtml](nuxeo-diff-jsf/src/main/resources/web/nuxeo.war/layouts/layout_diff_template.xhtml), you will see that the `value` passed to the `<nxl:widget>` tag is `#{value.leftValue}` or `#{value.rightValue}`, `value` being the object passed to the `<nxl:layout>` tag `value` attribute: `diffDisplayBlock`, of type `DiffDisplayBlockImpl`.\nThe `leftValue` and `rightValue` members of `DiffDisplayBlockImpl` are of type `Map<String, Map<String, PropertyDiffDisplay>>`. The first level Map keys are schema names, the second level ones are field keys.\nFinally, the `PropertyDiffDisplay` object has two members: `value` and `styleClass`, `value` holding the value to display and `styleClass` the css style class to apply to the &lt;span&gt; wrapping the value.\n\nFor example if we compare two documents where only the \"dublincore:title\" property is different (\"My first doc\" and \"My second doc\") we could have the following `diffDisplayBlock` object:\n\n```java\ndiffDisplayBlock.getLeftValue() = {dublincore={title={value=\"My first doc\", styleClass=\"redBackgroundColor\"}}}\ndiffDisplayBlock.getRightValue() = {dublincore={title={value=\"My second doc\", styleClass=\"greenBackgroundColor\"}}}\n```\n\nOn the widget side, the field definitions must match the `diffDisplayBlock` object structure, that's why the generated field definitions of the widget used for \"dublincore:title\" would be:\n\n```xml\n<fields>\n  <field>dublincore:title/value</field>\n  <field>dublincore:title/styleClass</field>\n</fields>\n```\n\nThis is important to know when designing a custom template for a diff widget (ie. where field definitions are automatically generated): you can use `#{field_0}` for the value itself and `#{field_1`} for the css style class associated to the value.\nBy default, only the items of a complex property or of a list property where the `displayAllItems` widget property is `true` can have a styleClass equal to `redBackgroundColor` or `greenBackgroundColor` in order to highlight the different items among all.\n\n#### To summarize: what you need to contribute to have a nice diff result for your custom document types\n\n- A `diffDisplay` contribution for each document type.\n\n- The associated `diffBlock` contributions. Don't forget that you can specify the items you want to display for a complex property and the fields/items for which you want to display the content diff links.\n\n- The specific widgets needed when the generic ones don't match your needs. Typically for a date property if you need to change the date format, or for a property bound to a directory to specifiy the directory name. Also don't forget that you can contribute a specific widget for a complex property item or a list item, using the item xpath.\n\n- The labels for each `diffBlock`, each widget and each subwidget in your `messages*.properties` files.\nFor example:\n\n```\nlabel.diffBlock.custom=My custom diff block title\nlabel.customSchema.customField=Custom field\nlabel.customSchema.customField.firstComplexItem=First item of the complex custom field\n```\n\n### Content diff\n\nWork in progress!\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "4f69afb464f7c016a935911f507fba6a",
            "encoding": "UTF-8",
            "length": 16919,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.diff.content",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      GET\n      /nuxeo/restAPI/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}?conversionType=(conversionType)&amp;locale={locale}\n    \n",
              "documentationHtml": "<p>\nGET\n/nuxeo/restAPI/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}?conversionType&#61;(conversionType)&amp;locale&#61;{locale}\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService--restlets",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.restAPI.contrib/Contributions/org.nuxeo.ecm.diff.content.restAPI.contrib--restlets",
              "id": "org.nuxeo.ecm.diff.content.restAPI.contrib--restlets",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
                "name": "org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService",
                "type": "service"
              },
              "version": "10.10-HF29",
              "xml": "<extension point=\"restlets\" target=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\">\n\n    <documentation>\n      GET\n      /nuxeo/restAPI/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}?conversionType=(conversionType)&amp;locale={locale}\n    </documentation>\n\n    <restletPlugin class=\"org.nuxeo.ecm.diff.content.restlet.ContentDiffRestlet\" enabled=\"true\" name=\"contentDiff\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/\n        </urlPattern>\n        <urlPattern>/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}\n        </urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.restAPI.contrib",
          "name": "org.nuxeo.ecm.diff.content.restAPI.contrib",
          "requirements": [],
          "resolutionOrder": 165,
          "services": [],
          "startOrder": 174,
          "version": "10.10-HF29",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.content.restAPI.contrib\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService\"\n    point=\"restlets\">\n\n    <documentation>\n      GET\n      /nuxeo/restAPI/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}?conversionType=(conversionType)&amp;locale={locale}\n    </documentation>\n\n    <restletPlugin name=\"contentDiff\"\n      class=\"org.nuxeo.ecm.diff.content.restlet.ContentDiffRestlet\"\n      enabled=\"true\" useSeam=\"false\">\n      <urlPatterns>\n        <urlPattern>/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/\n        </urlPattern>\n        <urlPattern>/contentDiff/{repo}/{leftDocId}/{rightDocId}/{fieldXPath}/{subPath}\n        </urlPattern>\n      </urlPatterns>\n    </restletPlugin>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-restAPI-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentation": "\n    Adapters for content diff\n  \n",
          "documentationHtml": "<p>\nAdapters for content diff\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapters/Contributions/org.nuxeo.ecm.diff.content.adapters--adapters",
              "id": "org.nuxeo.ecm.diff.content.adapters--adapters",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "10.10-HF29",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.diff.content.ContentDiffAdapter\" factory=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffDocumentModelAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapters",
          "name": "org.nuxeo.ecm.diff.content.adapters",
          "requirements": [],
          "resolutionOrder": 166,
          "services": [],
          "startOrder": 172,
          "version": "10.10-HF29",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.content.adapters\">\n  <documentation>\n    Adapters for content diff\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.diff.content.ContentDiffAdapter\"\n      factory=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffDocumentModelAdapterFactory\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-document-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
          "documentation": "\n    @author Antoine Taillefer (ataillefer@nuxeo.com)\n  \n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
              "descriptors": [
                "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterFactoryDescriptor"
              ],
              "documentation": "\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n    \n",
              "documentationHtml": "<p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent/ExtensionPoints/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--adapterFactory",
              "id": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--adapterFactory",
              "label": "adapterFactory (org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent)",
              "name": "adapterFactory",
              "version": "10.10-HF29"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
              "descriptors": [
                "org.nuxeo.ecm.diff.content.adapter.MimeTypeContentDifferDescriptor"
              ],
              "documentation": "\n      Allows to contribute default implementation of\n      content diff according to the mime type.\n    \n",
              "documentationHtml": "<p>\nAllows to contribute default implementation of\ncontent diff according to the mime type.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent/ExtensionPoints/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--mimeTypeContentDiffer",
              "id": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--mimeTypeContentDiffer",
              "label": "mimeTypeContentDiffer (org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent)",
              "name": "mimeTypeContentDiffer",
              "version": "10.10-HF29"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
              "descriptors": [
                "org.nuxeo.ecm.diff.content.MimeTypesDescriptor"
              ],
              "documentation": "\n      @since 10.10\n\n      Allows to contribute the list of blacklisted mime types for HTML\n      conversion.\n\n      By default, contributing a list merges its mime types\n      with the existing ones.\n      To remove a mime type, use enabled=false.\n      <code>\n    <extension point=\"htmlConversionBlacklistedMimeTypes\" target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n        <mimeTypes>\n            <mimeType>application/msword</mimeType>\n            <mimeType>application/rtf</mimeType>\n            <mimeType enabled=\"false\">application/pdf</mimeType>\n        </mimeTypes>\n    </extension>\n</code>\n\n\n      To override the whole list, use override=\"true\".\n      <code>\n    <extension point=\"htmlConversionBlacklistedMimeTypes\" target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n        <mimeTypes override=\"true\">\n            <mimeType>application/msword</mimeType>\n        </mimeTypes>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\n&#64;since 10.10\n</p><p>\nAllows to contribute the list of blacklisted mime types for HTML\nconversion.\n</p><p>\nBy default, contributing a list merges its mime types\nwith the existing ones.\nTo remove a mime type, use enabled&#61;false.\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;htmlConversionBlacklistedMimeTypes&#34; target&#61;&#34;org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent&#34;&gt;\n        &lt;mimeTypes&gt;\n            &lt;mimeType&gt;application/msword&lt;/mimeType&gt;\n            &lt;mimeType&gt;application/rtf&lt;/mimeType&gt;\n            &lt;mimeType enabled&#61;&#34;false&#34;&gt;application/pdf&lt;/mimeType&gt;\n        &lt;/mimeTypes&gt;\n    &lt;/extension&gt;\n</code></pre><p>\nTo override the whole list, use override&#61;&#34;true&#34;.\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;htmlConversionBlacklistedMimeTypes&#34; target&#61;&#34;org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent&#34;&gt;\n        &lt;mimeTypes override&#61;&#34;true&#34;&gt;\n            &lt;mimeType&gt;application/msword&lt;/mimeType&gt;\n        &lt;/mimeTypes&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent/ExtensionPoints/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--htmlConversionBlacklistedMimeTypes",
              "id": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--htmlConversionBlacklistedMimeTypes",
              "label": "htmlConversionBlacklistedMimeTypes (org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent)",
              "name": "htmlConversionBlacklistedMimeTypes",
              "version": "10.10-HF29"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
          "name": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
          "requirements": [],
          "resolutionOrder": 167,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent/Services/org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManager",
              "id": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManager",
              "overriden": false,
              "version": "10.10-HF29"
            }
          ],
          "startOrder": 871,
          "version": "10.10-HF29",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n  <implementation\n    class=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\" />\n\n  <documentation>\n    @author Antoine Taillefer (ataillefer@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManager\" />\n  </service>\n\n  <extension-point name=\"adapterFactory\">\n    <documentation>\n      @author Antoine Taillefer (ataillefer@nuxeo.com)\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterFactoryDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"mimeTypeContentDiffer\">\n    <documentation>\n      Allows to contribute default implementation of\n      content diff according to the mime type.\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.diff.content.adapter.MimeTypeContentDifferDescriptor\" />\n  </extension-point>\n\n  <extension-point\n    name=\"htmlConversionBlacklistedMimeTypes\">\n    <documentation>\n      @since 10.10\n\n      Allows to contribute the list of blacklisted mime types for HTML\n      conversion.\n\n      By default, contributing a list merges its mime types\n      with the existing ones.\n      To remove a mime type, use enabled=false.\n      <code>\n        <extension\n          target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\"\n          point=\"htmlConversionBlacklistedMimeTypes\">\n          <mimeTypes>\n            <mimeType>application/msword</mimeType>\n            <mimeType>application/rtf</mimeType>\n            <mimeType enabled=\"false\">application/pdf</mimeType>\n          </mimeTypes>\n        </extension>\n      </code>\n\n      To override the whole list, use override=\"true\".\n      <code>\n        <extension\n          target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\"\n          point=\"htmlConversionBlacklistedMimeTypes\">\n          <mimeTypes override=\"true\">\n            <mimeType>application/msword</mimeType>\n          </mimeTypes>\n        </extension>\n      </code>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.diff.content.MimeTypesDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-adapter-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Default builtin content diff adapters\n    \n",
              "documentationHtml": "<p>\nDefault builtin content diff adapters\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--adapterFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.contrib/Contributions/org.nuxeo.ecm.diff.content.adapter.contrib--adapterFactory",
              "id": "org.nuxeo.ecm.diff.content.adapter.contrib--adapterFactory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "name": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "type": "service"
              },
              "version": "10.10-HF29",
              "xml": "<extension point=\"adapterFactory\" target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n\n    <documentation>\n      Default builtin content diff adapters\n    </documentation>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--mimeTypeContentDiffer",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.contrib/Contributions/org.nuxeo.ecm.diff.content.adapter.contrib--mimeTypeContentDiffer",
              "id": "org.nuxeo.ecm.diff.content.adapter.contrib--mimeTypeContentDiffer",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "name": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "type": "service"
              },
              "version": "10.10-HF29",
              "xml": "<extension point=\"mimeTypeContentDiffer\" target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n    <contentDiffer class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/html</pattern>\n    </contentDiffer>\n    <contentDiffer class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/plain</pattern>\n    </contentDiffer>\n    <contentDiffer class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/xml</pattern>\n    </contentDiffer>\n    <contentDiffer class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>application/json</pattern>\n    </contentDiffer>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent--htmlConversionBlacklistedMimeTypes",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.contrib/Contributions/org.nuxeo.ecm.diff.content.adapter.contrib--htmlConversionBlacklistedMimeTypes",
              "id": "org.nuxeo.ecm.diff.content.adapter.contrib--htmlConversionBlacklistedMimeTypes",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "name": "org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent",
                "type": "service"
              },
              "version": "10.10-HF29",
              "xml": "<extension point=\"htmlConversionBlacklistedMimeTypes\" target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\">\n    <mimeTypes>\n      <!-- PDF -->\n      <mimeType>application/pdf</mimeType>\n\n      <!-- Office spreadsheet -->\n      <mimeType>application/vnd.ms-excel</mimeType>\n      <mimeType>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n      </mimeType>\n      <mimeType>application/vnd.sun.xml.calc</mimeType>\n      <mimeType>application/vnd.sun.xml.calc.template</mimeType>\n      <mimeType>application/vnd.oasis.opendocument.spreadsheet\n      </mimeType>\n      <mimeType>application/vnd.oasis.opendocument.spreadsheet-template\n      </mimeType>\n\n      <!-- Office presentation -->\n      <mimeType>application/vnd.ms-powerpoint</mimeType>\n      <mimeType>application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </mimeType>\n      <mimeType>application/vnd.sun.xml.impress</mimeType>\n      <mimeType>application/vnd.sun.xml.impress.template</mimeType>\n      <mimeType>application/vnd.oasis.opendocument.presentation\n      </mimeType>\n      <mimeType>application/vnd.oasis.opendocument.presentation-template\n      </mimeType>\n    </mimeTypes>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.adapter.contrib",
          "name": "org.nuxeo.ecm.diff.content.adapter.contrib",
          "requirements": [],
          "resolutionOrder": 168,
          "services": [],
          "startOrder": 171,
          "version": "10.10-HF29",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.content.adapter.contrib\">\n  <extension\n    target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\"\n    point=\"adapterFactory\">\n\n    <documentation>\n      Default builtin content diff adapters\n    </documentation>\n\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\"\n    point=\"mimeTypeContentDiffer\">\n    <contentDiffer\n      class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/html</pattern>\n    </contentDiffer>\n    <contentDiffer\n      class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/plain</pattern>\n    </contentDiffer>\n    <contentDiffer\n      class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>text/xml</pattern>\n    </contentDiffer>\n    <contentDiffer\n      class=\"org.nuxeo.ecm.diff.content.adapter.HtmlContentDiffer\">\n      <pattern>application/json</pattern>\n    </contentDiffer>\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.diff.content.adapter.ContentDiffAdapterManagerComponent\"\n    point=\"htmlConversionBlacklistedMimeTypes\">\n    <mimeTypes>\n      <!-- PDF -->\n      <mimeType>application/pdf</mimeType>\n\n      <!-- Office spreadsheet -->\n      <mimeType>application/vnd.ms-excel</mimeType>\n      <mimeType>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n      </mimeType>\n      <mimeType>application/vnd.sun.xml.calc</mimeType>\n      <mimeType>application/vnd.sun.xml.calc.template</mimeType>\n      <mimeType>application/vnd.oasis.opendocument.spreadsheet\n      </mimeType>\n      <mimeType>application/vnd.oasis.opendocument.spreadsheet-template\n      </mimeType>\n\n      <!-- Office presentation -->\n      <mimeType>application/vnd.ms-powerpoint</mimeType>\n      <mimeType>application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </mimeType>\n      <mimeType>application/vnd.sun.xml.impress</mimeType>\n      <mimeType>application/vnd.sun.xml.impress.template</mimeType>\n      <mimeType>application/vnd.oasis.opendocument.presentation\n      </mimeType>\n      <mimeType>application/vnd.oasis.opendocument.presentation-template\n      </mimeType>\n    </mimeTypes>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.converter.contrib/Contributions/org.nuxeo.ecm.diff.content.converter.contrib--converter",
              "id": "org.nuxeo.ecm.diff.content.converter.contrib--converter",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "10.10-HF29",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.diff.content.converters.ContentDiffHtmlConverter\" name=\"contentDiffHtmlConverter\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/html</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.diff.content.converters.ContentDiffTextConverter\" name=\"contentDiffTextConverter\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content/org.nuxeo.ecm.diff.content.converter.contrib",
          "name": "org.nuxeo.ecm.diff.content.converter.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.convert.plugins",
            "org.nuxeo.ecm.platform.convert.plugins"
          ],
          "resolutionOrder": 344,
          "services": [],
          "startOrder": 173,
          "version": "10.10-HF29",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.diff.content.converter.contrib\">\n\n  <require>org.nuxeo.ecm.platform.convert.plugins</require>\n  <require>org.nuxeo.ecm.core.convert.plugins</require>\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n    point=\"converter\">\n\n    <converter name=\"contentDiffHtmlConverter\" class=\"org.nuxeo.ecm.diff.content.converters.ContentDiffHtmlConverter\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/html</destinationMimeType>\n    </converter>\n\n    <converter name=\"contentDiffTextConverter\" class=\"org.nuxeo.ecm.diff.content.converters.ContentDiffTextConverter\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/content-diff-convert-service-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-diff-content-10.10-HF29.jar",
      "groupId": "org.nuxeo.ecm",
      "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.diff/org.nuxeo.diff.content",
      "id": "org.nuxeo.diff.content",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_222\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.6\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.diff\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.diff.content;singleton:=true\r\nNuxeo-Component: OSGI-INF/content-diff-restAPI-contrib.xml,OSGI-INF/co\r\n ntent-diff-document-adapter-contrib.xml,OSGI-INF/content-diff-adapter\r\n -framework.xml,OSGI-INF/content-diff-adapter-contrib.xml,OSGI-INF/con\r\n tent-diff-convert-service-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 344,
      "minResolutionOrder": 165,
      "packages": [
        "nuxeo-10.10-HF03",
        "nuxeo-10.10-HF15",
        "nuxeo-10.10-HF29",
        "nuxeo-diff"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Diff\n\nThis repo hosts the source code of a plugin for Nuxeo Platform that allows to render a diff between two documents or two versions of a document.\nThe comparison takes into account all the properties shared by the documents, which means that if a comparison is done between two documents of a different type, only the schemas in common will be \"diffed\".\nThe comparison also takes into account blob-type properties.\n\n\n## Building and deploying\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Diff Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-diff).\n\n## QA results\n\n[![Build Status](https://qa.nuxeo.org/jenkins/buildStatus/icon?job=master/addons_nuxeo-diff-master)](https://qa.nuxeo.org/jenkins/job/master/job/addons_nuxeo-diff-master/)\n\n## Configuring\n\n### Diff display\n\nThe `DiffDisplayService` offers several extension points to configure the document diff display.\nMost of the code samples exposed here can be found in the [diff-display-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-display-contrib.xml) and [diff-widgets-contrib.xml](nuxeo-diff-jsf/src/main/resources/OSGI-INF/diff-widgets-contrib.xml) files.\n\n#### Configuring groups of properties to display with the diffDisplay extension point.\n\nA `diffDisplay` contribution represents a number of `diffBlocks` that you want to display when asking for a document comparison.\nIt is bound to a document type.\nA `diffBlock` contribution represents a number of properties (fields) that you want to display (see next section).\n\nWhen asking for the comparison between 2 versions of a document, the `diffDisplay` bound to the document type or a super type is used.\nIf no `diffDisplay` is found for this type or a super type a fall back is done on the default diff display mode: one block per document schema and for each block all the fields of the schema that are different.\n\n*Beware that in this case the order of the schemas and of the fields is undefined.*\n\nWhen asking for the comparison between 2 documents:\n- If they are of the same type: if  a `diffDisplay` is found for this type or a super type then it is used, else a fall back is done on the default diff display mode.\n- If they are of different types: if  a `diffDisplay` is found for a common super type then it is used, else a fall back is done on the default diff display mode.\n\nFor example, this is the `diffDisplay` contribution bound to the _File_ type:\n```xml\n<diffDisplay type=\"File\">\n  <diffBlocks>\n    <diffBlock name=\"heading\" />\n    <diffBlock name=\"dublincore\" />\n    <diffBlock name=\"files\" />\n  </diffDisplay>\n</diffBlocks>\n```\n\n_Note that the order of the diffBlocks is taken into account when rendering the diff display._\n\n#### Configuring a group of properties to display with the diffBlock extension point\n\nA `diffBlock` contribution represents a number of `fields` that you want to display. It is rendered as a foldable box.\nThe `label` attribute of a `diffBlock` contribution is used as the title of the foldable box.\nA `field` is defined by its `schema` and its `name`.\n\nFor example, this is the \"heading\" `diffBlock` contribution:\n```xml\n<diffBlock name=\"heading\" label=\"label.diffBlock.heading\">\n  <fields>\n    <field schema=\"dublincore\" name=\"title\" />\n    <field schema=\"dublincore\" name=\"description\" />\n  </fields>\n</diffBlock>\n```\n_Note that the order of the fields is taken into account when rendering the diff block._\n\nFor complex properties, you can contribute inside the `field` element the property `items` that you want to display:\n```xml\n<field schema=\"complextypes\" name=\"complex\">\n  <items>\n    <item name=\"stringItem\" />\n    <item name=\"thirdItem\" />\n    <item name=\"fourthItem\" />\n  </items>\n</field>\n```\n\n_Note that the order of the items is taken into account when rendering the field._\n\nThis is used for the `files` field of the `files` diff block:\n```xml\n<field schema=\"files\" name=\"files\">\n  <items>\n    <!-- Display the file only, not the filename which is managed\n         by the file widget type -->\n    <item name=\"file\" displayContentDiffLinks=\"true\" />\n  </items>\n</field>\n```\n\nIf no `items` are specified, all the property items are displayed.\n\nFor content properties (that hold a blob) or string ones you can set the `displayContentDiffLinks` attribute to `true` on a `field` or an `item` to display the content diff links.\nThese links will open a fancybox showing the detailed content diff using the usual green and red colors to distinguish the added/removed parts of the content.\nFor now, 2 links are displayed: _Textual diff_ based on a text conversion and _Html diff_ based on an html conversion (keeps the content layout).\n\n#### Configuring property widgets with the widgets extension point\n\n##### Principle\n\nWhen rendering a `diffBlock`, the `DiffDisplayService` builds a layout definition on the fly, including a layout row for each `field` of the `diffBlock`.\nEach row contains a widget definition for the `field`, and the layout template renders 2 instances of this widget definition: one for the left document and one for the right document.\nThe content diff links, if displayed, are also rendered by a widget inside the layout row.\n\nHow is the widget definition built for a given `field`?\nA lookup is done in the `LayoutStore` service to find a specific widget definition named with the xpath of the property.\nIf such a definition is not found, a lookup is done to find a generic widget definition named with the type of the property.\n\nThis allows you to only contribute a specific widget definition if the generic one doesn't match your needs for a given field, typically if you need a custom template, label or custom properties.\n\n##### Example\n\nLets say we have contributed the following `diffBlock`:\n```xml\n<diffBlock name=\"myCustomBlock\" label=\"label.diffBlock.custom\">\n  <fields>\n    <field schema=\"file\" name=\"content\" />\n    <field schema=\"dublincore\" name=\"title\" />\n  </fields>\n</diffBlock>\n```\n\nand the following widgets to the `widgets` extension point of the `org.nuxeo.ecm.platform.forms.layout.LayoutStore` component:\n```xml\n<extension target=\"org.nuxeo.ecm.platform.forms.layout.LayoutStore\"\n  point=\"widgets\">\n\n  <widget name=\"file:content\" type=\"file\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <labels>\n      <label mode=\"any\">label.summary.download.file</label>\n    </labels>\n    <translated>true</translated>\n    <properties mode=\"any\">\n    </properties>\n  </widget>\n\n  <widget name=\"string\" type=\"template\">\n    <categories>\n      <category>diff</category>\n    </categories>\n    <properties mode=\"any\">\n      <property name=\"widgetType\">text</property>\n      <property name=\"template\">\n        /widgets/generic_diff_widget_template.xhtml\n      </property>\n    </properties>\n  </widget>\n\n</extension>\n```\n\nWhen rendering the \"myCustomBlock\" `diffBlock`, the `DiffDisplayService` will:\n\n- Look for a specific widget definition named \"file:content\" in the `LayoutStore`, find it and use it for the \"file:content\" field.\n\n- Look for a specific widget definition named \"dublincore:title\" in the `LayoutStore`, won't find it and therefore will look for a generic widget definition named with the field type, ie. \"string\", find it and use it for the dublincore:title field.\n\nIn this use case, the \"string\" generic widget definition is sufficient to display the \"dublincore:title\" field.\nIt uses a widget of type \"text\" with \"label.dublincore.title\" as a label and \"dublincore:title\" as a field definition.\nWe can easily understand here the interest of generic widgets: once you have the type and xpath of a property, the matching widget definition can be computed on the fly using the property type to guess the widget type (\"string\" => \"text\", \"date\" => \"datetime\", etc.) and the property xpath for the field definition and label.\n\nThe \"file:content\" specific widget definition is contributed here to use a custom label \"label.summary.download.file\" instead of the one that would have been generated for the \"content\" generic widget definition: \"label.file.content\".\n\n_Note that in both cases (generic and specific) you don't need to define the widget field definitions since they are automatically computed from the property xpath, except in particular cases like \"note:note\" where the \"mime-type\" field is needed._\n\n##### List and complex properties\n\nYou might already know that the widgets used to display list and complex properties have subwidgets.\nIn the case of a list property, a subwidget is needed for the list items; in the case of a complex property, a subwidget is needed for each item of the complex property.\nThe lookup done by the `DiffDisplayService_` for the first-level widgets is also done recursively for the subwidgets!\n\n###### List property\n\nFor a list property, lets take the example of \"dublincore:contributors\", which is a string list.\n\n- To display the list, nothing special is needed so the \"scalarList\" generic widget definition can be used.\n\n- To display a list item (a contributor, which is of type \"string\"), the \"string\" generic widget definition doesn't match our needs: it would display the contributor's username whereas we want to display its fullname (firstname lastname).\nSo we need a specific widget definition for the list items subwidget to use a custom template able to display the contributor's fullname.\nThe name of this widget definition must match the xpath of the list item property, ie. \"dublincore:contributors/item\".\n\nTherefore, two widget definitions are involved:\n\n- The \"scalarList\" generic widget definition:\n\n```xml\n<widget name=\"scalarList\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"displayAllItems\">false</property>\n    <property name=\"displayItemIndexes\">true</property>\n    <property name=\"template\">\n      /widgets/list_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"dublincore:contributors/item\" specific widget definition:\n\n```xml\n<widget name=\"dublincore:contributors/item\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.dublincore.contributors.item</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"template\">/widgets/contributors_item_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n###### Complex property\n\nFor a complex property, lets take the example of a \"complextypes:complex\" property with two items \"stringItem\" and \"directoryItem\".\n\"stringItem\" is a simple string, but \"directoryItem\" is a string that needs to be bound to the \"myDirectory\" directory.\n\n- To display the complex property, nothing special is needed so the \"complex\" generic widget definition can be used.\n\n- To display the \"directoryItem\" item, the \"string\" generic widget definition doesn't match our needs: it would display the directory entry code stored in the backend whereas we want to display its label.\nSo we need a specific widget definition for the \"directoryItem\" subwidget to use the \"selectOneDirectory\" widget type bound to the \"myDirectory\" directory.\nAs for a list item, the name of this widget definition must match the xpath of the complex property item, ie. \"complextypes:complex/directoryItem\".\n\nTherefore, two widget definitions are involved:\n\n- The \"complex\" generic widget definition:\n\n```xml\n<widget name=\"complex\" type=\"template\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <properties mode=\"any\">\n    <property name=\"display\">inline</property>\n    <property name=\"template\">\n      /widgets/complex_diff_widget_template.xhtml\n    </property>\n  </properties>\n</widget>\n```\n\n- The \"complextypes:complex/directoryItem\" specific widget definition:\n\n```xml\n<widget name=\"complextypes:complex/directoryItem\" type=\"selectOneDirectory\">\n  <categories>\n    <category>diff</category>\n  </categories>\n  <labels>\n    <label mode=\"any\">label.complextypes.complex.directoryItem</label>\n  </labels>\n  <translated>true</translated>\n  <properties mode=\"any\">\n    <property name=\"directoryName\">myDirectory</property>\n    <property name=\"localize\">true</property>\n    <property name=\"ordering\">ordering,label</property>\n  </properties>\n</widget>\n```\n\n###### Useful widget properties\n\nYou can use the following properties on a list widget definition (typically \"scalarList\", \"complexList\" or \"files:files\"):\n\n`<property name=\"displayAllItems\">[true|false]</property>`\nIf set to `true`, all the list items will be displayed, otherwise only the different ones will be.\n\n`<property name=\"displayItemIndexes\">[true|false]</property>`\nIf set to `true`, a subwidget will be added to the widget definition to display the list item indexes.\n\nYou can use the following property on a complex widget definition (typically \"complex\"):\n\n`<property name=\"display\">[inline|*]</property>`\nIf set to `inline` the complex items will be displayed as a table with one line and one column per item, otherwise as a table with one column and one line per item.\n\n##### About the value bound to the diff widgets\n\nIf you take a look at [layout_diff_template.xhtml](nuxeo-diff-jsf/src/main/resources/web/nuxeo.war/layouts/layout_diff_template.xhtml), you will see that the `value` passed to the `<nxl:widget>` tag is `#{value.leftValue}` or `#{value.rightValue}`, `value` being the object passed to the `<nxl:layout>` tag `value` attribute: `diffDisplayBlock`, of type `DiffDisplayBlockImpl`.\nThe `leftValue` and `rightValue` members of `DiffDisplayBlockImpl` are of type `Map<String, Map<String, PropertyDiffDisplay>>`. The first level Map keys are schema names, the second level ones are field keys.\nFinally, the `PropertyDiffDisplay` object has two members: `value` and `styleClass`, `value` holding the value to display and `styleClass` the css style class to apply to the &lt;span&gt; wrapping the value.\n\nFor example if we compare two documents where only the \"dublincore:title\" property is different (\"My first doc\" and \"My second doc\") we could have the following `diffDisplayBlock` object:\n\n```java\ndiffDisplayBlock.getLeftValue() = {dublincore={title={value=\"My first doc\", styleClass=\"redBackgroundColor\"}}}\ndiffDisplayBlock.getRightValue() = {dublincore={title={value=\"My second doc\", styleClass=\"greenBackgroundColor\"}}}\n```\n\nOn the widget side, the field definitions must match the `diffDisplayBlock` object structure, that's why the generated field definitions of the widget used for \"dublincore:title\" would be:\n\n```xml\n<fields>\n  <field>dublincore:title/value</field>\n  <field>dublincore:title/styleClass</field>\n</fields>\n```\n\nThis is important to know when designing a custom template for a diff widget (ie. where field definitions are automatically generated): you can use `#{field_0}` for the value itself and `#{field_1`} for the css style class associated to the value.\nBy default, only the items of a complex property or of a list property where the `displayAllItems` widget property is `true` can have a styleClass equal to `redBackgroundColor` or `greenBackgroundColor` in order to highlight the different items among all.\n\n#### To summarize: what you need to contribute to have a nice diff result for your custom document types\n\n- A `diffDisplay` contribution for each document type.\n\n- The associated `diffBlock` contributions. Don't forget that you can specify the items you want to display for a complex property and the fields/items for which you want to display the content diff links.\n\n- The specific widgets needed when the generic ones don't match your needs. Typically for a date property if you need to change the date format, or for a property bound to a directory to specifiy the directory name. Also don't forget that you can contribute a specific widget for a complex property item or a list item, using the item xpath.\n\n- The labels for each `diffBlock`, each widget and each subwidget in your `messages*.properties` files.\nFor example:\n\n```\nlabel.diffBlock.custom=My custom diff block title\nlabel.customSchema.customField=Custom field\nlabel.customSchema.customField.firstComplexItem=First item of the complex custom field\n```\n\n### Content diff\n\nWork in progress!\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "4f69afb464f7c016a935911f507fba6a",
        "encoding": "UTF-8",
        "length": 16919,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "10.10-HF29"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-web-ui",
      "artifactVersion": "10.10-HF33",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.web.ui",
          "org.nuxeo.web.ui.drive",
          "org.nuxeo.web.ui.easyshare"
        ],
        "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web",
        "id": "grp:org.nuxeo.web",
        "name": "org.nuxeo.web",
        "parentIds": [
          "grp:org.nuxeo.web.ui"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo Drive Server\n\nAddon needed for [Nuxeo Drive](https://github.com/nuxeo/nuxeo-drive) to work against a Nuxeo Platform instance.\n\n# Building\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Drive Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-drive).\nOr manually copy the built artifacts into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\nYou should then have the 'Nuxeo Drive' tab in your Home allowing you to download the Nuxeo Drive client for your favorite OS :-)\n\n## QA results\n\n| Nuxeo QA Job | Status |\n|-----|--------|\n| Build Status | [![Build Status](https://qa.nuxeo.org/jenkins/job/master/job/addons_nuxeo-drive-server-master/badge/icon)](https://qa.nuxeo.org/jenkins/job/master/job/addons_nuxeo-drive-server-master/) |\n| Build Multi-DB | [![Build Multi-DB](https://qa.nuxeo.org/jenkins/job/master/job/addons_nuxeo-drive-server-master-multidb/badge/icon)](https://qa.nuxeo.org/jenkins/job/master/job/addons_nuxeo-drive-server-master-multidb) |\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "dd6f47d8da7a0fa3605f1935a942caf4",
            "encoding": "UTF-8",
            "length": 1712,
            "mimeType": "text/plain",
            "name": "README.md"
          },
          {
            "blobProviderId": "default",
            "content": "\n#EasyShare\n\n## About EasyShare\nThe EasyShare package is an addon for the Nuxeo platform to enable sharing files from the repository with external users not requiring a login. You can specify a set of files to be accessed by a specific unique URL which allows anonymous download of either files within the share or proxies from anywhere else in your repository through a special folder listing page. You can also set an expiration date for sharing availability and track all downloads and get notifications.\n\nThis project is an on-going project, supported by Nuxeo\n\n## Deploying\nEasyShare is available as a package add-on [from the Nuxeo Marketplace] https://connect.nuxeo.com/nuxeo/site/marketplace/package/easyshare\n\n## Resources\n### Documentation\nThe documentation for EasyShare is available in our Documentation Center: http://doc.nuxeo.com/x/rooZAQ\n\n### Following Project QA Status\n\n[![Build Status](https://qa.nuxeo.org/jenkins/buildStatus/icon?job=addons_nuxeo-easyshare-master)](https://qa.nuxeo.org/jenkins/job/addons_nuxeo-easyshare-master/)\n\n### Reporting Issues\nYou can follow the developments in the Nuxeo Platform project of our JIRA bug tracker, which includes an EasyShare component:\nhttps://jira.nuxeo.com/browse/NXP/component/14003\n\nYou can report issues on: http://answers.nuxeo.com\n\n## About Nuxeo\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Netflix, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "8348c059f1deecffbe4b8bc0ce482018",
            "encoding": "UTF-8",
            "length": 1986,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.web.ui",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.authentication.contrib/Contributions/org.nuxeo.web.ui.authentication.contrib--startURL",
              "id": "org.nuxeo.web.ui.authentication.contrib--startURL",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <startURLPattern>\n      <patterns>\n        <pattern>ui</pattern>\n        <pattern>repo</pattern>\n      </patterns>\n    </startURLPattern>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.authentication.contrib",
          "name": "org.nuxeo.web.ui.authentication.contrib",
          "requirements": [],
          "resolutionOrder": 951,
          "services": [],
          "startOrder": 797,
          "version": "10.10-HF33",
          "xmlFileContent": "<component name=\"org.nuxeo.web.ui.authentication.contrib\">\n  <extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <startURLPattern>\n      <patterns>\n        <pattern>ui</pattern>\n        <pattern>repo</pattern>\n      </patterns>\n    </startURLPattern>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/auth-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--actions",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.actions/Contributions/org.nuxeo.web.ui.actions--actions",
              "id": "org.nuxeo.web.ui.actions--actions",
              "registrationOrder": 73,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n\n    <action id=\"webui\" label=\"WEBUI\" link=\"ui\" order=\"90\" type=\"bare_link\">\n      <category>MAIN_TABS</category>\n    </action>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.actions",
          "name": "org.nuxeo.web.ui.actions",
          "requirements": [],
          "resolutionOrder": 952,
          "services": [],
          "startOrder": 796,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.web.ui.actions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\"\n    point=\"actions\">\n\n    <action id=\"webui\" link=\"ui\" label=\"WEBUI\" order=\"90\" type=\"bare_link\">\n      <category>MAIN_TABS</category>\n    </action>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/actions-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--loginScreen",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.login.startup.page.web.contrib/Contributions/org.nuxeo.login.startup.page.web.contrib--loginScreen",
              "id": "org.nuxeo.login.startup.page.web.contrib--loginScreen",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"loginScreen\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <loginScreenConfig>\n      <startupPages>\n        <startupPage id=\"web\" priority=\"100\">\n          <path>ui/</path>\n        </startupPage>\n      </startupPages>\n    </loginScreenConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.login.startup.page.web.contrib",
          "name": "org.nuxeo.login.startup.page.web.contrib",
          "requirements": [],
          "resolutionOrder": 953,
          "services": [],
          "startOrder": 724,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.login.startup.page.web.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"loginScreen\">\n    <loginScreenConfig>\n      <startupPages>\n        <startupPage id=\"web\" priority=\"100\">\n          <path>ui/</path>\n        </startupPage>\n      </startupPages>\n    </loginScreenConfig>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/login-startup-page-web-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--resources",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.resources/Contributions/org.nuxeo.web.ui.resources--resources",
              "id": "org.nuxeo.web.ui.resources--resources",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.ecm.platform.WebResources\">\n\n    <resource name=\"nuxeo-app.html\" type=\"import\">\n      <uri>/ui/nuxeo-app.html</uri>\n    </resource>\n\n    <resource name=\"nuxeo-web-ui-bundle.html\" type=\"import\">\n      <uri>/ui/nuxeo-web-ui-bundle.html</uri>\n    </resource>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--bundles",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.resources/Contributions/org.nuxeo.web.ui.resources--bundles",
              "id": "org.nuxeo.web.ui.resources--bundles",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"bundles\" target=\"org.nuxeo.ecm.platform.WebResources\">\n\n    <!-- main bundle with all import resources -->\n    <bundle name=\"web-ui\">\n      <resources>\n        <resource>nuxeo-app.html</resource>\n        <resource>nuxeo-web-ui-bundle.html</resource>\n      </resources>\n    </bundle>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.resources",
          "name": "org.nuxeo.web.ui.resources",
          "requirements": [],
          "resolutionOrder": 954,
          "services": [],
          "startOrder": 800,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"org.nuxeo.web.ui.resources\">\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"resources\">\n\n    <resource name=\"nuxeo-app.html\" type=\"import\">\n      <uri>/ui/nuxeo-app.html</uri>\n    </resource>\n\n    <resource name=\"nuxeo-web-ui-bundle.html\" type=\"import\">\n      <uri>/ui/nuxeo-web-ui-bundle.html</uri>\n    </resource>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"bundles\">\n\n    <!-- main bundle with all import resources -->\n    <bundle name=\"web-ui\">\n      <resources>\n        <resource>nuxeo-app.html</resource>\n        <resource>nuxeo-web-ui-bundle.html</resource>\n      </resources>\n    </bundle>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/webresources-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.url.codec.web.contribs/Contributions/org.nuxeo.url.codec.web.contribs--codecs",
              "id": "org.nuxeo.url.codec.web.contribs--codecs",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n    <documentViewCodec class=\"org.nuxeo.web.ui.url.codec.WebNotificationDocumentIdCodec\" enabled=\"true\" name=\"notificationDocId\" prefix=\"doc\" priority=\"100\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.url.codec.web.contribs",
          "name": "org.nuxeo.url.codec.web.contribs",
          "requirements": [],
          "resolutionOrder": 967,
          "services": [],
          "startOrder": 789,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.url.codec.web.contribs\">\n\n  <extension target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\" point=\"codecs\">\n    <documentViewCodec name=\"notificationDocId\" enabled=\"true\" prefix=\"doc\" priority=\"100\"\n      class=\"org.nuxeo.web.ui.url.codec.WebNotificationDocumentIdCodec\" />\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/url-codecs-web-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.request.contrib/Contributions/org.nuxeo.web.ui.request.contrib--filterConfig",
              "id": "org.nuxeo.web.ui.request.contrib--filterConfig",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"filterConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n    <filterConfig cacheTime=\"31536000\" cached=\"true\" name=\"cached_ui_static\">\n      <!-- if url contains a timestamp param: approximately one year -->\n      <pattern>/nuxeo/ui/.*\\\\?.*ts=.+</pattern>\n    </filterConfig>\n    <filterConfig cacheTime=\"86400\" cached=\"true\" name=\"ui_static\">\n      <!-- For other web ui resources: trade off between agressive caching and HF applying within 24 hours -->\n      <!-- Exclude JS and HTML files due to: https://jira.nuxeo.com/browse/NXP-25595 -->\n      <pattern>/nuxeo/ui/.*\\.(?!(html|js)$).*</pattern>\n    </filterConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.request.contrib",
          "name": "org.nuxeo.web.ui.request.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib"
          ],
          "resolutionOrder": 968,
          "services": [],
          "startOrder": 799,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.web.ui.request.contrib\">\n\n  <require>org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\"\n    point=\"filterConfig\">\n    <filterConfig name=\"cached_ui_static\" cached=\"true\" cacheTime=\"31536000\">\n      <!-- if url contains a timestamp param: approximately one year -->\n      <pattern>${org.nuxeo.ecm.contextPath}/ui/.*\\\\?.*ts=.+</pattern>\n    </filterConfig>\n    <filterConfig name=\"ui_static\" cached=\"true\" cacheTime=\"86400\">\n      <!-- For other web ui resources: trade off between agressive caching and HF applying within 24 hours -->\n      <!-- Exclude JS and HTML files due to: https://jira.nuxeo.com/browse/NXP-25595 -->\n      <pattern>${org.nuxeo.ecm.contextPath}/ui/.*\\.(?!(html|js)$).*</pattern>\n    </filterConfig>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/browser-cache-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.properties.contrib/Contributions/org.nuxeo.web.ui.properties.contrib--configuration",
              "id": "org.nuxeo.web.ui.properties.contrib--configuration",
              "registrationOrder": 55,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "10.10-HF33",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <!-- enrichers -->\n    <property list=\"true\" name=\"org.nuxeo.web.ui.enrichers.document\">hasContent</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">firstAccessibleAncestor</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">permissions</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">breadcrumb</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">preview</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">favorites</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">subscribedNotifications</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">thumbnail</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">renditions</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">pendingTasks</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">runnableWorkflows</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">runningWorkflows</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">collections</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">audit</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">subtypes</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">tags</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">publications</property>\n    <property list=\"true\" name=\"org.nuxeo.web.ui.enrichers.blob\">appLinks</property>\n\n    <!-- Properties to be fetched when loading current document, default is 'properties' meaning all -->\n    <property list=\"true\" name=\"org.nuxeo.web.ui.fetch.document\">properties</property>\n\n    <!-- Date (time) format -->\n    <property name=\"org.nuxeo.web.ui.dateFormat\">LL</property>\n    <property name=\"org.nuxeo.web.ui.dateTimeFormat\">LLL</property>\n\n    <!-- First Day Of Week -->\n    <property name=\"org.nuxeo.web.ui.firstDayOfWeek\"/>\n\n    <!-- Comments only on doc with 'Commentable' facet ? -->\n    <property name=\"org.nuxeo.web.ui.enforceCommentable\">false</property>\n\n    <!-- Is pagination on for tasks endpoint ? -->\n    <property name=\"org.nuxeo.web.ui.taskEndpoint.isPaginated\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui/org.nuxeo.web.ui.properties.contrib",
          "name": "org.nuxeo.web.ui.properties.contrib",
          "requirements": [],
          "resolutionOrder": 969,
          "services": [],
          "startOrder": 798,
          "version": "10.10-HF33",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.web.ui.properties.contrib\">\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <!-- enrichers -->\n    <property name=\"org.nuxeo.web.ui.enrichers.document\" list=\"true\">hasContent</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">firstAccessibleAncestor</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">permissions</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">breadcrumb</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">preview</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">favorites</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">subscribedNotifications</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">thumbnail</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">renditions</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">pendingTasks</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">runnableWorkflows</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">runningWorkflows</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">collections</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">audit</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">subtypes</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">tags</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.document\">publications</property>\n    <property name=\"org.nuxeo.web.ui.enrichers.blob\" list=\"true\">appLinks</property>\n\n    <!-- Properties to be fetched when loading current document, default is 'properties' meaning all -->\n    <property name=\"org.nuxeo.web.ui.fetch.document\" list=\"true\">properties</property>\n\n    <!-- Date (time) format -->\n    <property name=\"org.nuxeo.web.ui.dateFormat\">LL</property>\n    <property name=\"org.nuxeo.web.ui.dateTimeFormat\">LLL</property>\n\n    <!-- First Day Of Week -->\n    <property name=\"org.nuxeo.web.ui.firstDayOfWeek\"></property>\n\n    <!-- Comments only on doc with 'Commentable' facet ? -->\n    <property name=\"org.nuxeo.web.ui.enforceCommentable\">false</property>\n\n    <!-- Is pagination on for tasks endpoint ? -->\n    <property name=\"org.nuxeo.web.ui.taskEndpoint.isPaginated\">false</property>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/web-ui-properties.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-web-ui-10.10-HF33.jar",
      "groupId": "org.nuxeo.web.ui",
      "hierarchyPath": "/grp:org.nuxeo.web.ui/grp:org.nuxeo.web/org.nuxeo.web.ui",
      "id": "org.nuxeo.web.ui",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_265\r\nBundle-ManifestVersion: 1\r\nBundle-Version: 0.0.1\r\nBundle-Vendor: Nuxeo\r\nNuxeo-RequiredBy: org.nuxeo.ecm.war\r\nBundle-Name: Nuxeo Web UI\r\nBundle-SymbolicName: org.nuxeo.web.ui;singleton:=true\r\nNuxeo-Component: OSGI-INF/auth-config.xml, OSGI-INF/actions-contrib.xm\r\n l, OSGI-INF/login-startup-page-web-contrib.xml OSGI-INF/webresources-\r\n contrib.xml, OSGI-INF/url-codecs-web-contrib.xml, OSGI-INF/browser-ca\r\n che-contrib.xml, OSGI-INF/web-ui-properties.xml\r\n\r\n",
      "maxResolutionOrder": 969,
      "minResolutionOrder": 951,
      "packages": [
        "nuxeo-10.10-HF01",
        "nuxeo-10.10-HF02",
        "nuxeo-10.10-HF03",
        "nuxeo-10.10-HF04",
        "nuxeo-10.10-HF05",
        "nuxeo-10.10-HF06",
        "nuxeo-10.10-HF07",
        "nuxeo-10.10-HF08",
        "nuxeo-10.10-HF09",
        "nuxeo-10.10-HF10",
        "nuxeo-10.10-HF11",
        "nuxeo-10.10-HF12",
        "nuxeo-10.10-HF13",
        "nuxeo-10.10-HF13",
        "nuxeo-10.10-HF14",
        "nuxeo-10.10-HF15",
        "nuxeo-10.10-HF16",
        "nuxeo-10.10-HF17",
        "nuxeo-10.10-HF18",
        "nuxeo-10.10-HF19",
        "nuxeo-10.10-HF20",
        "nuxeo-10.10-HF21",
        "nuxeo-10.10-HF22",
        "nuxeo-10.10-HF23",
        "nuxeo-10.10-HF24",
        "nuxeo-10.10-HF25",
        "nuxeo-10.10-HF26",
        "nuxeo-10.10-HF27",
        "nuxeo-10.10-HF28",
        "nuxeo-10.10-HF29",
        "nuxeo-10.10-HF30",
        "nuxeo-10.10-HF31",
        "nuxeo-10.10-HF32",
        "nuxeo-10.10-HF33",
        "nuxeo-web-ui"
      ],
      "readme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://qa.nuxeo.org/jenkins/buildStatus/icon?job=master/addons_nuxeo-web-ui-master)](https://qa.nuxeo.org/jenkins/job/master/job/addons_nuxeo-web-ui-master/)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/5d8cd2a3c56745ecaae7e7f92a683ea7)](https://www.codacy.com/app/Nuxeo/nuxeo-web-ui)\n\n## Nuxeo Web UI\n\n### About\nNuxeo Web UI is a standard base web application for Nuxeo Platform. It is highly customizable and scalable, developed with [Polymer](https://polymer-library.polymer-project.org/) and leveraging [nuxeo-elements](https://github.com/nuxeo/nuxeo-elements), our library of custom elements.\n\n## Getting Started\n\n### Install dependencies\n\n```sh\nnpm install -g gulp bower && npm install && bower install\n```\n\n### Development workflow\n\n#### Serve / watch\n\n```sh\ngulp serve\n```\n\nThis outputs an IP address you can use to locally test and another that can be used on devices connected to your network.\n\n#### Run tests\n\n```sh\ngulp test:local\n```\n\nThis runs the unit tests defined in the `app/test` directory through [web-component-tester](https://github.com/Polymer/web-component-tester).\n\n#### Build & Vulcanize\n\n```sh\ngulp\n```\n\nBuild and optimize the current project, ready for deployment. This includes linting as well as vulcanization, image, script, stylesheet and HTML optimization and minification.\n\n## License\n\n[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html) \n\n(C) Copyright Nuxeo Corp. (http://nuxeo.com/)\n\nAll images, icons, fonts, and videos contained in this folder are copyrighted by Nuxeo, all rights reserved.\n\n## About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "a45facbc87a9bd4b47ad95007eb0aaaa",
        "encoding": "UTF-8",
        "length": 2266,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "10.10-HF33"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-convert-api",
      "artifactVersion": "10.10-HF03",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.convert",
          "org.nuxeo.ecm.core.convert.api",
          "org.nuxeo.ecm.core.convert.plugins"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert",
        "id": "grp:org.nuxeo.ecm.core.convert",
        "name": "org.nuxeo.ecm.core.convert",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.ecm.core.convert.api",
      "components": [],
      "fileName": "nuxeo-core-convert-api-10.10-HF03.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.api",
      "id": "org.nuxeo.ecm.core.convert.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_191\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 5.4.2.qualifier\r\nExport-Package: org.nuxeo.ecm.core.convert.api\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: NXCore Covert API\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nImport-Package: org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;ap\r\n i=split,org.nuxeo.ecm.core.api.blobholder\r\nBundle-SymbolicName: org.nuxeo.ecm.core.convert.api\r\n\r\n",
      "packages": [
        "nuxeo-10.10-HF03"
      ],
      "requirements": [],
      "version": "10.10-HF03"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-elasticsearch-core",
      "artifactVersion": "10.10-HF32",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.elasticsearch.audit",
          "org.nuxeo.elasticsearch.automation",
          "org.nuxeo.elasticsearch.core",
          "org.nuxeo.elasticsearch.http.readonly",
          "org.nuxeo.elasticsearch.seqgen",
          "org.nuxeo.elasticsearch.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.elasticsearch",
        "id": "grp:org.nuxeo.elasticsearch",
        "name": "org.nuxeo.elasticsearch",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "nuxeo-elasticsearch\n===================\n\n## About\n\nThis project aims at providing Nuxeo bundles to integrate\nElasticsearch with the Nuxeo Platform.\n\nThe idea is to index/query Nuxeo Documents to/from Elasticsearch.\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\n\n## Running tests\n\n### Using the embedded Elasticsearch\n\nWith the default `RestClient`:\n```bash\nmvn -nsu test\n# -Dnuxeo.test.elasticsearch.client=RestClient is set by default\n```\n\nOr with the `TransportClient`\n\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient\n```\n\n### Using an external Elasticsearch\n\n1. Start an Elasticsearch using docker:\n```bash\ndocker run -p 9400:9200 -p 9600:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.5.3\n```\n\n2.a Run the test with `RestClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.addressList=http://localhost:9400\n```\n\n2.b Or run the test with `TransportClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient -Dnuxeo.test.elasticsearch.clusterName=docker-cluster -Dnuxeo.test.elasticsearch.addressList=localhost:9600\n```\n\n## Links\n\n- Administration: http://doc.nuxeo.com/x/UBY5AQ\n- Configuring mapping: http://doc.nuxeo.com/x/WxI5AQ\n- Overview: http://doc.nuxeo.com/x/iYElAQ\n- [Open jira tikets](https://jira.nuxeo.com/issues/?jql=project%20%3D%20NXP%20AND%20component%20%3D%20Elasticsearch%20AND%20Status%20!%3D%20%22Resolved%22%20ORDER%20BY%20updated%20DESC%2C%20priority%20DESC%2C%20created%20ASC)\n",
            "digest": "39fe49f5b0c4b24c62cb008ba470a7c5",
            "encoding": "UTF-8",
            "length": 1513,
            "mimeType": "text/plain",
            "name": "README.md"
          },
          {
            "blobProviderId": "default",
            "content": "nuxeo-elasticsearch\n===================\n\n## About\n\nThis project aims at providing Nuxeo bundles to integrate\nElasticsearch with the Nuxeo Platform.\n\nThe idea is to index/query Nuxeo Documents to/from Elasticsearch.\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\n\n## Links\n\n- Administration: http://doc.nuxeo.com/x/UBY5AQ\n- Configuring mapping: http://doc.nuxeo.com/x/WxI5AQ\n- Overview: http://doc.nuxeo.com/x/iYElAQ\n- [Open jira tikets](https://jira.nuxeo.com/issues/?jql=project%20%3D%20NXP%20AND%20component%20%3D%20Elasticsearch%20AND%20Status%20!%3D%20%22Resolved%22%20ORDER%20BY%20updated%20DESC%2C%20priority%20DESC%2C%20created%20ASC)\n",
            "digest": "7fbdf5cdf9aabc776ab41836cca3c60f",
            "encoding": "UTF-8",
            "length": 690,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.elasticsearch.core",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.core.listener/Contributions/org.nuxeo.elasticsearch.core.listener--listener",
              "id": "org.nuxeo.elasticsearch.core.listener--listener",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "10.10-HF32",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.elasticsearch.listener.ElasticSearchInlineListener\" enabled=\"true\" name=\"elasticSearchInlineListener\" postCommit=\"false\" priority=\"500\">\n      <event>beforeDocumentModification</event>\n      <event>documentCreated</event>\n      <event>documentImported</event>\n      <event>documentCreatedByCopy</event>\n      <event>documentMoved</event>\n      <event>lifecycle_transition_event</event>\n      <event>documentRestored</event>\n      <event>documentSecurityUpdated</event>\n      <event>documentRemoved</event>\n      <event>sessionSaved</event>\n      <event>aboutToCheckIn</event>\n      <event>documentCheckedOut</event>\n      <event>documentCheckedIn</event>\n      <event>binaryTextUpdated</event>\n      <event>documentTagUpdated</event>\n      <event>documentProxyUpdated</event>\n      <event>childrenOrderChanged</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n      <event>afterMakeRecord</event>\n      <event>afterSetRetention</event>\n      <event>afterExtendRetention</event>\n      <event>afterSetLegalHold</event>\n      <event>afterRemoveLegalHold</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.core.listener",
          "name": "org.nuxeo.elasticsearch.core.listener",
          "requirements": [],
          "resolutionOrder": 196,
          "services": [],
          "startOrder": 708,
          "version": "10.10-HF32",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.core.listener\">\n\n  <extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener name=\"elasticSearchInlineListener\" async=\"false\"\n      class=\"org.nuxeo.elasticsearch.listener.ElasticSearchInlineListener\" enabled=\"${elasticsearch.enabled:=true}\"\n      postCommit=\"false\" priority=\"500\">\n      <event>beforeDocumentModification</event>\n      <event>documentCreated</event>\n      <event>documentImported</event>\n      <event>documentCreatedByCopy</event>\n      <event>documentMoved</event>\n      <event>lifecycle_transition_event</event>\n      <event>documentRestored</event>\n      <event>documentSecurityUpdated</event>\n      <event>documentRemoved</event>\n      <event>sessionSaved</event>\n      <event>aboutToCheckIn</event>\n      <event>documentCheckedOut</event>\n      <event>documentCheckedIn</event>\n      <event>binaryTextUpdated</event>\n      <event>documentTagUpdated</event>\n      <event>documentProxyUpdated</event>\n      <event>childrenOrderChanged</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n      <event>afterMakeRecord</event>\n      <event>afterSetRetention</event>\n      <event>afterExtendRetention</event>\n      <event>afterSetLegalHold</event>\n      <event>afterRemoveLegalHold</event>\n    </listener>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/listener-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.work.config/Contributions/org.nuxeo.elasticsearch.work.config--queues",
              "id": "org.nuxeo.elasticsearch.work.config--queues",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "10.10-HF32",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"elasticSearchIndexing\">\n      <name>ElasticSearch Indexing</name>\n      <maxThreads>4</maxThreads>\n      <!-- <usePriority>true</usePriority> -->\n      <category>elasticSearchIndexing</category>\n      <clearCompletedAfterSeconds>90</clearCompletedAfterSeconds>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.work.config",
          "name": "org.nuxeo.elasticsearch.work.config",
          "requirements": [],
          "resolutionOrder": 197,
          "services": [],
          "startOrder": 719,
          "version": "10.10-HF32",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.work.config\" version=\"1.0\">\n\n  <extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"elasticSearchIndexing\">\n      <name>ElasticSearch Indexing</name>\n      <maxThreads>${elasticsearch.indexing.maxThreads:=4}</maxThreads>\n      <!-- <usePriority>true</usePriority> -->\n      <category>elasticSearchIndexing</category>\n      <clearCompletedAfterSeconds>${elasticsearch.indexing.clearCompletedAfterSeconds:=90}</clearCompletedAfterSeconds>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/workmanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchDocWriter",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent.contrib/Contributions/org.nuxeo.elasticsearch.ElasticSearchComponent.contrib--elasticSearchDocWriter",
              "id": "org.nuxeo.elasticsearch.ElasticSearchComponent.contrib--elasticSearchDocWriter",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.elasticsearch.ElasticSearchComponent",
                "name": "org.nuxeo.elasticsearch.ElasticSearchComponent",
                "type": "service"
              },
              "version": "10.10-HF32",
              "xml": "<extension point=\"elasticSearchDocWriter\" target=\"org.nuxeo.elasticsearch.ElasticSearchComponent\">\n    <writer class=\"org.nuxeo.elasticsearch.io.JsonESDocumentWriter\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent.contrib",
          "name": "org.nuxeo.elasticsearch.ElasticSearchComponent.contrib",
          "requirements": [],
          "resolutionOrder": 198,
          "services": [],
          "startOrder": 705,
          "version": "10.10-HF32",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.ElasticSearchComponent.contrib\" version=\"1.0\">\n\n  <extension point=\"elasticSearchDocWriter\" target=\"org.nuxeo.elasticsearch.ElasticSearchComponent\">\n    <writer class=\"org.nuxeo.elasticsearch.io.JsonESDocumentWriter\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/elasticsearch-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.marshallers/Contributions/org.nuxeo.elasticsearch.marshallers--marshallers",
              "id": "org.nuxeo.elasticsearch.marshallers--marshallers",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "10.10-HF32",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.elasticsearch.io.marshallers.json.AggregateJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.elasticsearch.io.HighlightJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.marshallers",
          "name": "org.nuxeo.elasticsearch.marshallers",
          "requirements": [],
          "resolutionOrder": 199,
          "services": [],
          "startOrder": 715,
          "version": "10.10-HF32",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.marshallers\" version=\"1.0.0\">\n  <extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.elasticsearch.io.marshallers.json.AggregateJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.elasticsearch.io.HighlightJsonEnricher\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scroll.service--scroll",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.scroll.contrib/Contributions/org.nuxeo.elasticsearch.scroll.contrib--scroll",
              "id": "org.nuxeo.elasticsearch.scroll.contrib--scroll",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "10.10-HF32",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.elasticsearch.scroll.ElasticSearchScroll\" name=\"elastic\" type=\"document\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.scroll.contrib",
          "name": "org.nuxeo.elasticsearch.scroll.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.scroll.service"
          ],
          "resolutionOrder": 200,
          "services": [],
          "startOrder": 716,
          "version": "10.10-HF32",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.scroll.contrib\" version=\"1.0\">\n  <require>org.nuxeo.ecm.core.scroll.service</require>\n  <extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll type=\"document\" name=\"elastic\" class=\"org.nuxeo.elasticsearch.scroll.ElasticSearchScroll\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/scroll-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.elasticsearch.ElasticSearchComponent",
          "declaredStartOrder": 50,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.elasticsearch.ElasticSearchComponent",
              "descriptors": [
                "org.nuxeo.elasticsearch.config.ElasticSearchEmbeddedServerConfig"
              ],
              "documentation": "\n      Extension point to setup an embedded Elasticsearch instance.\n\n      It creates a local node using the same JVM as Nuxeo.\n\n      This is a test configuration and must NOT be used in production,\n      it is limited to one shard and no replica.\n\n      <code>\n    <elasticSearchLocal clusterName=\"MyCluster\" httpEnabled=\"true\"\n        indexStoreType=\"mmapfs\" nodeName=\"MyNuxeo\" pathData=\"/var/lib/nuxeo/elasticsearch/\"/>\n</code>\n\n\n      Please refer to the Elasticsearch node configuration\n\n      clusterName is the cluster.name\n\n      nodeName is the node.name, default to nuxeoNode\n\n      pathData is the path.data\n\n      indexStoreType is the index.store_type\n\n      httpEnabled is the node.enable_http\n\n    \n",
              "documentationHtml": "<p>\nExtension point to setup an embedded Elasticsearch instance.\n</p><p>\nIt creates a local node using the same JVM as Nuxeo.\n</p><p>\nThis is a test configuration and must NOT be used in production,\nit is limited to one shard and no replica.\n</p><p>\n</p><pre><code>    &lt;elasticSearchLocal clusterName&#61;&#34;MyCluster&#34; httpEnabled&#61;&#34;true&#34;\n        indexStoreType&#61;&#34;mmapfs&#34; nodeName&#61;&#34;MyNuxeo&#34; pathData&#61;&#34;/var/lib/nuxeo/elasticsearch/&#34;/&gt;\n</code></pre><p>\nPlease refer to the Elasticsearch node configuration\n</p><p>\nclusterName is the cluster.name\n</p><p>\nnodeName is the node.name, default to nuxeoNode\n</p><p>\npathData is the path.data\n</p><p>\nindexStoreType is the index.store_type\n</p><p>\nhttpEnabled is the node.enable_http\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent/ExtensionPoints/org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchEmbeddedServer",
              "id": "org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchEmbeddedServer",
              "label": "elasticSearchEmbeddedServer (org.nuxeo.elasticsearch.ElasticSearchComponent)",
              "name": "elasticSearchEmbeddedServer",
              "version": "10.10-HF32"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.elasticsearch.ElasticSearchComponent",
              "descriptors": [
                "org.nuxeo.elasticsearch.config.ElasticSearchClientConfig"
              ],
              "documentation": "\n      Extension point to define how to access the Elasticsearch cluster.\n\n      For the TransportClient protocol:\n      <code>\n    <elasticSeachClient class=\"org.nuxeo.elasticsearch.client.ESTransportClientFactory\">\n        <option name=\"addressList\">localhost:9300</option>\n        <option name=\"clusterName\">elasticsearch</option>\n        <option name=\"clientTransportSniff\">false</option>\n        <option name=\"clientTransportIgnoreClusterName\">false</option>\n        <option name=\"clientTransportPingTimeout\">5s</option>\n        <option name=\"clientTransportNodesSamplerInterval\">5s</option>\n    </elasticSeachClient>\n</code>\n\n\n      For a Rest client:\n      <code>\n    <elasticSeachClient class=\"org.nuxeo.elasticsearch.client.ESRestClientFactory\">\n        <option name=\"addressList\">localhost:9200</option>\n    </elasticSeachClient>\n</code>\n",
              "documentationHtml": "<p>\nExtension point to define how to access the Elasticsearch cluster.\n</p><p>\nFor the TransportClient protocol:\n</p><p></p><pre><code>    &lt;elasticSeachClient class&#61;&#34;org.nuxeo.elasticsearch.client.ESTransportClientFactory&#34;&gt;\n        &lt;option name&#61;&#34;addressList&#34;&gt;localhost:9300&lt;/option&gt;\n        &lt;option name&#61;&#34;clusterName&#34;&gt;elasticsearch&lt;/option&gt;\n        &lt;option name&#61;&#34;clientTransportSniff&#34;&gt;false&lt;/option&gt;\n        &lt;option name&#61;&#34;clientTransportIgnoreClusterName&#34;&gt;false&lt;/option&gt;\n        &lt;option name&#61;&#34;clientTransportPingTimeout&#34;&gt;5s&lt;/option&gt;\n        &lt;option name&#61;&#34;clientTransportNodesSamplerInterval&#34;&gt;5s&lt;/option&gt;\n    &lt;/elasticSeachClient&gt;\n</code></pre><p>\nFor a Rest client:\n</p><p></p><pre><code>    &lt;elasticSeachClient class&#61;&#34;org.nuxeo.elasticsearch.client.ESRestClientFactory&#34;&gt;\n        &lt;option name&#61;&#34;addressList&#34;&gt;localhost:9200&lt;/option&gt;\n    &lt;/elasticSeachClient&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent/ExtensionPoints/org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchClient",
              "id": "org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchClient",
              "label": "elasticSearchClient (org.nuxeo.elasticsearch.ElasticSearchComponent)",
              "name": "elasticSearchClient",
              "version": "10.10-HF32"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.elasticsearch.ElasticSearchComponent",
              "descriptors": [
                "org.nuxeo.elasticsearch.config.ElasticSearchIndexConfig"
              ],
              "documentation": "\n      Extension point used to setup an Elasticsearch index.\n\n      The one used to index Nuxeo documents must be of type \"doc\".\n\n      <code>\n    <elasticSearchIndex create=\"true\" name=\"nuxeo\" type=\"doc\">\n        <settings/>\n        <mapping/>\n        <fetchFromSources>\n            <include>ecm:*</include>\n            <include>dc:*</include>\n            <exclude>ecm:binaryFulltext</exclude>\n        </fetchFromSources>\n    </elasticSearchIndex>\n</code>\n\n\n      @Since 5.9.3\n      name is the Elasticsearch index name.\n\n      type is the Elasticsearch type that hold a mapping, \"doc\" is the mapping\n      for Nuxeo documents\n\n      create can be set to false if you don't want Nuxeo to initialize the index\n      and mapping.\n\n      settings the Elasticsearch settings\n      @see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules.html\n\n      mapping the Elasticsearch mapping for the type\n      @see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping.html\n\n      @Since 5.9.5\n      fetchFromSources, include a list of field name pattern that will be included\n      when fetching document from Elasticsearch (@see NxQueryBuilder.fetchFromElasticsearch)\n      use the exclude list to prevent returning fulltext or long fields.\n\n    \n",
              "documentationHtml": "<p>\nExtension point used to setup an Elasticsearch index.\n</p><p>\nThe one used to index Nuxeo documents must be of type &#34;doc&#34;.\n</p><p>\n</p><pre><code>    &lt;elasticSearchIndex create&#61;&#34;true&#34; name&#61;&#34;nuxeo&#34; type&#61;&#34;doc&#34;&gt;\n        &lt;settings/&gt;\n        &lt;mapping/&gt;\n        &lt;fetchFromSources&gt;\n            &lt;include&gt;ecm:*&lt;/include&gt;\n            &lt;include&gt;dc:*&lt;/include&gt;\n            &lt;exclude&gt;ecm:binaryFulltext&lt;/exclude&gt;\n        &lt;/fetchFromSources&gt;\n    &lt;/elasticSearchIndex&gt;\n</code></pre><p>\n&#64;Since 5.9.3\nname is the Elasticsearch index name.\n</p><p>\ntype is the Elasticsearch type that hold a mapping, &#34;doc&#34; is the mapping\nfor Nuxeo documents\n</p><p>\ncreate can be set to false if you don&#39;t want Nuxeo to initialize the index\nand mapping.\n</p><p>\nsettings the Elasticsearch settings\n&#64;see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules.html\n</p><p>\nmapping the Elasticsearch mapping for the type\n&#64;see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping.html\n</p><p>\n&#64;Since 5.9.5\nfetchFromSources, include a list of field name pattern that will be included\nwhen fetching document from Elasticsearch (&#64;see NxQueryBuilder.fetchFromElasticsearch)\nuse the exclude list to prevent returning fulltext or long fields.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent/ExtensionPoints/org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchIndex",
              "id": "org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchIndex",
              "label": "elasticSearchIndex (org.nuxeo.elasticsearch.ElasticSearchComponent)",
              "name": "elasticSearchIndex",
              "version": "10.10-HF32"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.elasticsearch.ElasticSearchComponent",
              "descriptors": [
                "org.nuxeo.elasticsearch.config.ElasticSearchDocWriterDescriptor"
              ],
              "documentation": "\n      Extension point used to setup the writer used when a document is indexed.\n      Must extend the JsonESDocumentWriter class.\n\n      <code>\n    <writer class=\"org.nuxeo.elasticsearch.io.JsonESDocumentWriter\"/>\n</code>\n",
              "documentationHtml": "<p>\nExtension point used to setup the writer used when a document is indexed.\nMust extend the JsonESDocumentWriter class.\n</p><p>\n</p><pre><code>    &lt;writer class&#61;&#34;org.nuxeo.elasticsearch.io.JsonESDocumentWriter&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent/ExtensionPoints/org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchDocWriter",
              "id": "org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchDocWriter",
              "label": "elasticSearchDocWriter (org.nuxeo.elasticsearch.ElasticSearchComponent)",
              "name": "elasticSearchDocWriter",
              "version": "10.10-HF32"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.elasticsearch.ElasticSearchComponent",
              "descriptors": [
                "org.nuxeo.elasticsearch.config.ESHintQueryBuilderDescriptor"
              ],
              "documentation": "\n      Extension point used to define the NXQL hints which enables the use of Elasticsearch operators.\n      Must implement the ESHintQueryBuilder interface.\n\n      @see https://doc.nuxeo.com/nxdoc/nxql/#elasticsearch-nxql-hints to have the available ES hints.\n\n    \n",
              "documentationHtml": "<p>\nExtension point used to define the NXQL hints which enables the use of Elasticsearch operators.\nMust implement the ESHintQueryBuilder interface.\n</p><p>\n&#64;see https://doc.nuxeo.com/nxdoc/nxql/#elasticsearch-nxql-hints to have the available ES hints.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent/ExtensionPoints/org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchHints",
              "id": "org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchHints",
              "label": "elasticSearchHints (org.nuxeo.elasticsearch.ElasticSearchComponent)",
              "name": "elasticSearchHints",
              "version": "10.10-HF32"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent",
          "name": "org.nuxeo.elasticsearch.ElasticSearchComponent",
          "requirements": [
            "org.nuxeo.ecm.core.repository.RepositoryServiceComponent"
          ],
          "resolutionOrder": 807,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.elasticsearch.ElasticSearchComponent",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent/Services/org.nuxeo.elasticsearch.api.ElasticSearchService",
              "id": "org.nuxeo.elasticsearch.api.ElasticSearchService",
              "overriden": false,
              "version": "10.10-HF32"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.elasticsearch.ElasticSearchComponent",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent/Services/org.nuxeo.elasticsearch.api.ElasticSearchIndexing",
              "id": "org.nuxeo.elasticsearch.api.ElasticSearchIndexing",
              "overriden": false,
              "version": "10.10-HF32"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.elasticsearch.ElasticSearchComponent",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.ElasticSearchComponent/Services/org.nuxeo.elasticsearch.api.ElasticSearchAdmin",
              "id": "org.nuxeo.elasticsearch.api.ElasticSearchAdmin",
              "overriden": false,
              "version": "10.10-HF32"
            }
          ],
          "startOrder": 807,
          "version": "10.10-HF32",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.ElasticSearchComponent\" version=\"1.0\">\n  <require>org.nuxeo.ecm.core.repository.RepositoryServiceComponent</require>\n  <implementation class=\"org.nuxeo.elasticsearch.ElasticSearchComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.elasticsearch.api.ElasticSearchService\" />\n    <provide interface=\"org.nuxeo.elasticsearch.api.ElasticSearchIndexing\" />\n    <provide interface=\"org.nuxeo.elasticsearch.api.ElasticSearchAdmin\" />\n  </service>\n\n  <extension-point name=\"elasticSearchEmbeddedServer\">\n    <documentation>\n      Extension point to setup an embedded Elasticsearch instance.\n\n      It creates a local node using the same JVM as Nuxeo.\n\n      This is a test configuration and must NOT be used in production,\n      it is limited to one shard and no replica.\n\n      <code>\n        <elasticSearchLocal clusterName=\"MyCluster\" httpEnabled=\"true\" indexStoreType=\"mmapfs\" nodeName=\"MyNuxeo\"\n          pathData=\"/var/lib/nuxeo/elasticsearch/\" />\n      </code>\n\n      Please refer to the Elasticsearch node configuration\n\n      clusterName is the cluster.name\n\n      nodeName is the node.name, default to nuxeoNode\n\n      pathData is the path.data\n\n      indexStoreType is the index.store_type\n\n      httpEnabled is the node.enable_http\n\n    </documentation>\n\n    <object class=\"org.nuxeo.elasticsearch.config.ElasticSearchEmbeddedServerConfig\" />\n  </extension-point>\n\n\n  <extension-point name=\"elasticSearchClient\">\n    <documentation>\n      Extension point to define how to access the Elasticsearch cluster.\n\n      For the TransportClient protocol:\n      <code>\n        <elasticSeachClient class=\"org.nuxeo.elasticsearch.client.ESTransportClientFactory\">\n          <option name=\"addressList\">localhost:9300</option>\n          <option name=\"clusterName\">elasticsearch</option>\n          <option name=\"clientTransportSniff\">false</option>\n          <option name=\"clientTransportIgnoreClusterName\">false</option>\n          <option name=\"clientTransportPingTimeout\">5s</option>\n          <option name=\"clientTransportNodesSamplerInterval\">5s</option>\n        </elasticSeachClient>\n      </code>\n\n      For a Rest client:\n      <code>\n        <elasticSeachClient class=\"org.nuxeo.elasticsearch.client.ESRestClientFactory\">\n          <option name=\"addressList\">localhost:9200</option>\n        </elasticSeachClient>\n      </code>\n\n    </documentation>\n    <object class=\"org.nuxeo.elasticsearch.config.ElasticSearchClientConfig\" />\n  </extension-point>\n\n  <extension-point name=\"elasticSearchIndex\">\n    <documentation>\n      Extension point used to setup an Elasticsearch index.\n\n      The one used to index Nuxeo documents must be of type \"doc\".\n\n      <code>\n        <elasticSearchIndex name=\"nuxeo\" create=\"true\" type=\"doc\">\n          <settings></settings>\n          <mapping></mapping>\n          <fetchFromSources>\n            <include>ecm:*</include>\n            <include>dc:*</include>\n            <exclude>ecm:binaryFulltext</exclude>\n          </fetchFromSources>\n        </elasticSearchIndex>\n      </code>\n\n      @Since 5.9.3\n      name is the Elasticsearch index name.\n\n      type is the Elasticsearch type that hold a mapping, \"doc\" is the mapping\n      for Nuxeo documents\n\n      create can be set to false if you don't want Nuxeo to initialize the index\n      and mapping.\n\n      settings the Elasticsearch settings\n      @see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules.html\n\n      mapping the Elasticsearch mapping for the type\n      @see http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping.html\n\n      @Since 5.9.5\n      fetchFromSources, include a list of field name pattern that will be included\n      when fetching document from Elasticsearch (@see NxQueryBuilder.fetchFromElasticsearch)\n      use the exclude list to prevent returning fulltext or long fields.\n\n    </documentation>\n\n    <object class=\"org.nuxeo.elasticsearch.config.ElasticSearchIndexConfig\" />\n  </extension-point>\n\n  <extension-point name=\"elasticSearchDocWriter\">\n    <documentation>\n      Extension point used to setup the writer used when a document is indexed.\n      Must extend the JsonESDocumentWriter class.\n\n      <code>\n        <writer class=\"org.nuxeo.elasticsearch.io.JsonESDocumentWriter\" />\n      </code>\n\n    </documentation>\n    <object class=\"org.nuxeo.elasticsearch.config.ElasticSearchDocWriterDescriptor\" />\n  </extension-point>\n\n\n  <extension-point name=\"elasticSearchHints\">\n    <documentation>\n      Extension point used to define the NXQL hints which enables the use of Elasticsearch operators.\n      Must implement the ESHintQueryBuilder interface.\n\n      @see https://doc.nuxeo.com/nxdoc/nxql/#elasticsearch-nxql-hints to have the available ES hints.\n\n    </documentation>\n    <object class=\"org.nuxeo.elasticsearch.config.ESHintQueryBuilderDescriptor\" />\n  </extension-point>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/elasticsearch-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--probes",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.managment.contrib/Contributions/org.nuxeo.elasticsearch.managment.contrib--probes",
              "id": "org.nuxeo.elasticsearch.managment.contrib--probes",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "10.10-HF32",
              "xml": "<extension point=\"probes\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n    <probe class=\"org.nuxeo.elasticsearch.status.ElasticSearchStatusProbe\" name=\"elasticSearchStatus\">\n      <label>Elastic Search probe</label>\n    </probe>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--healthCheck",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.managment.contrib/Contributions/org.nuxeo.elasticsearch.managment.contrib--healthCheck",
              "id": "org.nuxeo.elasticsearch.managment.contrib--healthCheck",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "10.10-HF32",
              "xml": "<extension point=\"healthCheck\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n    <probe enabled=\"true\" name=\"elasticSearchStatus\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.managment.contrib",
          "name": "org.nuxeo.elasticsearch.managment.contrib",
          "requirements": [
            "org.nuxeo.elasticsearch.ElasticSearchComponent"
          ],
          "resolutionOrder": 809,
          "services": [],
          "startOrder": 714,
          "version": "10.10-HF32",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.managment.contrib\">\n  <require>org.nuxeo.elasticsearch.ElasticSearchComponent</require>\n\n  <extension point=\"probes\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n    <probe name=\"elasticSearchStatus\" class=\"org.nuxeo.elasticsearch.status.ElasticSearchStatusProbe\">\n      <label>Elastic Search probe</label>\n    </probe>\n  </extension>\n\n  <extension point=\"healthCheck\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n    <probe name=\"elasticSearchStatus\" enabled=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/elasticsearch-managment-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.elasticsearch.ElasticSearchComponent--elasticSearchHints",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.hint.contrib/Contributions/org.nuxeo.elasticsearch.hint.contrib--elasticSearchHints",
              "id": "org.nuxeo.elasticsearch.hint.contrib--elasticSearchHints",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.elasticsearch.ElasticSearchComponent",
                "name": "org.nuxeo.elasticsearch.ElasticSearchComponent",
                "type": "service"
              },
              "version": "10.10-HF32",
              "xml": "<extension point=\"elasticSearchHints\" target=\"org.nuxeo.elasticsearch.ElasticSearchComponent\">\n    <hint class=\"org.nuxeo.elasticsearch.hint.MatchESHintQueryBuilder\" name=\"match\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.MatchPhraseESHintQueryBuilder\" name=\"match_phrase\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.MatchPhrasePrefixESHintQueryBuilder\" name=\"match_phrase_prefix\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.MultiMatchESHintQueryBuilder\" name=\"multi_match\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.RegexESHintQueryBuilder\" name=\"regex\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.FuzzyESHintQueryBuilder\" name=\"fuzzy\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.WildcardESHintQueryBuilder\" name=\"wildcard\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.CommonESHintQueryBuilder\" name=\"common\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.QueryStringESHintQueryBuilder\" name=\"query_string\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.SimpleQueryStringESHintQueryBuilder\" name=\"simple_query_string\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.MoreLikeThisESHintQueryBuilder\" name=\"more_like_this\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.GeoBoundingBoxESHintQueryBuilder\" name=\"geo_bounding_box\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.GeoDistanceESHintQueryBuilder\" name=\"geo_distance\"/>\n    <hint class=\"org.nuxeo.elasticsearch.hint.GeoShapeESHintQueryBuilder\" name=\"geo_shape\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.hint.contrib",
          "name": "org.nuxeo.elasticsearch.hint.contrib",
          "requirements": [
            "org.nuxeo.elasticsearch.ElasticSearchComponent"
          ],
          "resolutionOrder": 812,
          "services": [],
          "startOrder": 710,
          "version": "10.10-HF32",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.hint.contrib\">\n  <require>org.nuxeo.elasticsearch.ElasticSearchComponent</require>\n\n  <extension point=\"elasticSearchHints\" target=\"org.nuxeo.elasticsearch.ElasticSearchComponent\">\n    <hint name=\"match\" class=\"org.nuxeo.elasticsearch.hint.MatchESHintQueryBuilder\" />\n    <hint name=\"match_phrase\" class=\"org.nuxeo.elasticsearch.hint.MatchPhraseESHintQueryBuilder\" />\n    <hint name=\"match_phrase_prefix\" class=\"org.nuxeo.elasticsearch.hint.MatchPhrasePrefixESHintQueryBuilder\" />\n    <hint name=\"multi_match\" class=\"org.nuxeo.elasticsearch.hint.MultiMatchESHintQueryBuilder\" />\n    <hint name=\"regex\" class=\"org.nuxeo.elasticsearch.hint.RegexESHintQueryBuilder\" />\n    <hint name=\"fuzzy\" class=\"org.nuxeo.elasticsearch.hint.FuzzyESHintQueryBuilder\" />\n    <hint name=\"wildcard\" class=\"org.nuxeo.elasticsearch.hint.WildcardESHintQueryBuilder\" />\n    <hint name=\"common\" class=\"org.nuxeo.elasticsearch.hint.CommonESHintQueryBuilder\" />\n    <hint name=\"query_string\" class=\"org.nuxeo.elasticsearch.hint.QueryStringESHintQueryBuilder\" />\n    <hint name=\"simple_query_string\" class=\"org.nuxeo.elasticsearch.hint.SimpleQueryStringESHintQueryBuilder\" />\n    <hint name=\"more_like_this\" class=\"org.nuxeo.elasticsearch.hint.MoreLikeThisESHintQueryBuilder\" />\n    <hint name=\"geo_bounding_box\" class=\"org.nuxeo.elasticsearch.hint.GeoBoundingBoxESHintQueryBuilder\" />\n    <hint name=\"geo_distance\" class=\"org.nuxeo.elasticsearch.hint.GeoDistanceESHintQueryBuilder\" />\n    <hint name=\"geo_shape\" class=\"org.nuxeo.elasticsearch.hint.GeoShapeESHintQueryBuilder\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/elasticsearch-hints-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.core.bulk.contrib/Contributions/org.nuxeo.elasticsearch.core.bulk.contrib--actions",
              "id": "org.nuxeo.elasticsearch.core.bulk.contrib--actions",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "10.10-HF32",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"1000\" enabled=\"true\" name=\"index\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.core.bulk.contrib/Contributions/org.nuxeo.elasticsearch.core.bulk.contrib--streamProcessor",
              "id": "org.nuxeo.elasticsearch.core.bulk.contrib--streamProcessor",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "10.10-HF32",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.elasticsearch.bulk.IndexAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" enabled=\"true\" logConfig=\"bulk\" name=\"reindex\">\n      <policy continueOnFailure=\"false\" delay=\"1s\" maxDelay=\"60s\" maxRetries=\"20\" name=\"default\"/>\n      <!-- concurrency to build indexing requests -->\n      <computation concurrency=\"2\" name=\"index\"/>\n      <!-- concurrency to execute indexing requests -->\n      <computation concurrency=\"2\" name=\"bulkIndex\"/>\n      <computation concurrency=\"1\" name=\"indexCompletion\"/>\n      <!-- optimal size of the elasticsearch bulk request -->\n      <option name=\"esBulkSizeBytes\">5242880</option>\n      <!-- max number of actions in the elasticsearch bulk request -->\n      <option name=\"esBulkActions\">1000</option>\n      <!-- flush elasticsearch bulk request interval -->\n      <option name=\"flushIntervalSeconds\">5</option>\n    </streamProcessor>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core/org.nuxeo.elasticsearch.core.bulk.contrib",
          "name": "org.nuxeo.elasticsearch.core.bulk.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.bulk.config"
          ],
          "resolutionOrder": 852,
          "services": [],
          "startOrder": 707,
          "version": "10.10-HF32",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.elasticsearch.core.bulk.contrib\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.bulk.config</require>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"index\" bucketSize=\"1000\" batchSize=\"25\" enabled=\"${elasticsearch.enabled:=true}\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"reindex\" class=\"org.nuxeo.elasticsearch.bulk.IndexAction\" logConfig=\"bulk\"\n      defaultConcurrency=\"2\" defaultPartitions=\"4\" enabled=\"${elasticsearch.enabled:=true}\">\n      <policy name=\"default\" maxRetries=\"20\" delay=\"1s\" maxDelay=\"60s\" continueOnFailure=\"false\" />\n      <!-- concurrency to build indexing requests -->\n      <computation name=\"index\" concurrency=\"2\" />\n      <!-- concurrency to execute indexing requests -->\n      <computation name=\"bulkIndex\" concurrency=\"2\" />\n      <computation name=\"indexCompletion\" concurrency=\"1\" />\n      <!-- optimal size of the elasticsearch bulk request -->\n      <option name=\"esBulkSizeBytes\">5242880</option>\n      <!-- max number of actions in the elasticsearch bulk request -->\n      <option name=\"esBulkActions\">1000</option>\n      <!-- flush elasticsearch bulk request interval -->\n      <option name=\"flushIntervalSeconds\">5</option>\n    </streamProcessor>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulk-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-elasticsearch-core-10.10-HF32.jar",
      "groupId": "org.nuxeo.elasticsearch",
      "hierarchyPath": "/grp:org.nuxeo.elasticsearch/org.nuxeo.elasticsearch.core",
      "id": "org.nuxeo.elasticsearch.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_222\r\nBundle-ManifestVersion: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: ElasticSearch core service integration\r\nBundle-SymbolicName: org.nuxeo.elasticsearch.core;singleton:=true\r\nNuxeo-Component: OSGI-INF/elasticsearch-service.xml,OSGI-INF/listener-\r\n contrib.xml,OSGI-INF/workmanager-contrib.xml,OSGI-INF/elasticsearch-s\r\n ervice-contrib.xml,OSGI-INF/marshallers-contrib.xml,OSGI-INF/elastics\r\n earch-managment-contrib.xml,OSGI-INF/bulk-contrib.xml,OSGI-INF/elasti\r\n csearch-hints-contrib.xml,OSGI-INF/scroll-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 852,
      "minResolutionOrder": 196,
      "packages": [
        "nuxeo-10.10-HF01",
        "nuxeo-10.10-HF03",
        "nuxeo-10.10-HF08",
        "nuxeo-10.10-HF10",
        "nuxeo-10.10-HF11",
        "nuxeo-10.10-HF12",
        "nuxeo-10.10-HF13",
        "nuxeo-10.10-HF16",
        "nuxeo-10.10-HF17",
        "nuxeo-10.10-HF21",
        "nuxeo-10.10-HF22",
        "nuxeo-10.10-HF25",
        "nuxeo-10.10-HF26",
        "nuxeo-10.10-HF28",
        "nuxeo-10.10-HF32"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "nuxeo-elasticsearch\n===================\n\n## About\n\nThis project aims at providing Nuxeo bundles to integrate\nElasticsearch with the Nuxeo Platform.\n\nThe idea is to index/query Nuxeo Documents to/from Elasticsearch.\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\n\n## Running tests\n\n### Using the embedded Elasticsearch\n\nWith the default `RestClient`:\n```bash\nmvn -nsu test\n# -Dnuxeo.test.elasticsearch.client=RestClient is set by default\n```\n\nOr with the `TransportClient`\n\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient\n```\n\n### Using an external Elasticsearch\n\n1. Start an Elasticsearch using docker:\n```bash\ndocker run -p 9400:9200 -p 9600:9300 docker.elastic.co/elasticsearch/elasticsearch-oss:6.5.3\n```\n\n2.a Run the test with `RestClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.addressList=http://localhost:9400\n```\n\n2.b Or run the test with `TransportClient`:\n```bash\nmvn -nsu test -Dnuxeo.test.elasticsearch.client=TransportClient -Dnuxeo.test.elasticsearch.clusterName=docker-cluster -Dnuxeo.test.elasticsearch.addressList=localhost:9600\n```\n\n## Links\n\n- Administration: http://doc.nuxeo.com/x/UBY5AQ\n- Configuring mapping: http://doc.nuxeo.com/x/WxI5AQ\n- Overview: http://doc.nuxeo.com/x/iYElAQ\n- [Open jira tikets](https://jira.nuxeo.com/issues/?jql=project%20%3D%20NXP%20AND%20component%20%3D%20Elasticsearch%20AND%20Status%20!%3D%20%22Resolved%22%20ORDER%20BY%20updated%20DESC%2C%20priority%20DESC%2C%20created%20ASC)\n",
        "digest": "39fe49f5b0c4b24c62cb008ba470a7c5",
        "encoding": "UTF-8",
        "length": 1513,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "10.10-HF32"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-convert-plugins",
      "artifactVersion": "10.10-HF28",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.convert",
          "org.nuxeo.ecm.core.convert.api",
          "org.nuxeo.ecm.core.convert.plugins"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert",
        "id": "grp:org.nuxeo.ecm.core.convert",
        "name": "org.nuxeo.ecm.core.convert",
        "parentIds": [
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.ecm.core.convert.plugins",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--converter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.plugins/org.nuxeo.ecm.core.convert.plugins/Contributions/org.nuxeo.ecm.core.convert.plugins--converter",
              "id": "org.nuxeo.ecm.core.convert.plugins--converter",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "10.10-HF28",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\" name=\"pdf2text\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">pdftotext</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XML2TextConverter\" name=\"xml2text\">\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>application/xml</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.Html2TextConverter\" name=\"html2text\">\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/xhtml</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.MD2TextConverter\" name=\"md2text\">\n      <sourceMimeType>text/x-web-markdown</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XL2TextConverter\" name=\"xl2text\">\n      <sourceMimeType>application/vnd.ms-excel</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XLX2TextConverter\" name=\"xlx2text\">\n      <sourceMimeType>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n       <parameter name=\"MAX_SIZE\">3145728</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.MSOffice2TextConverter\" name=\"msoffice2text\">\n      <sourceMimeType>application/msword</sourceMimeType>\n      <sourceMimeType>application/vnd.ms-powerpoint</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.RTF2TextConverter\" name=\"rtf2text\">\n      <sourceMimeType>application/rtf</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.DOCX2TextConverter\" name=\"docx2text\">\n      <sourceMimeType>application/vnd.openxmlformats-officedocument.wordprocessingml.document</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.PPTX2TextConverter\" name=\"pptx2text\">\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.OOo2TextConverter\" name=\"oo2text\">\n      <sourceMimeType>application/vnd.sun.xml.impress</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.impress.template</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation-template\n      </sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc.template</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.spreadsheet\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.spreadsheet-template\n      </sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.RFC822ToTextConverter\" name=\"rfc822totext\">\n      <destinationMimeType>text/plain</destinationMimeType>\n      <sourceMimeType>message/rfc822</sourceMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.FullTextConverter\" name=\"any2text\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\" name=\"ps2pdf\">\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <sourceMimeType>application/eps</sourceMimeType>\n      <sourceMimeType>application/x-eps</sourceMimeType>\n      <sourceMimeType>image/eps</sourceMimeType>\n      <sourceMimeType>image/x-eps</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <destinationMimeType>application/pdf</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ps2pdf</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"ps2pdf2text\">\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <sourceMimeType>application/eps</sourceMimeType>\n      <sourceMimeType>application/x-eps</sourceMimeType>\n      <sourceMimeType>image/eps</sourceMimeType>\n      <sourceMimeType>image/x-eps</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <conversionSteps>\n        <subconverter>ps2pdf</subconverter>\n        <subconverter>pdf2text</subconverter>\n      </conversionSteps>\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.plugins/org.nuxeo.ecm.core.convert.plugins",
          "name": "org.nuxeo.ecm.core.convert.plugins",
          "requirements": [],
          "resolutionOrder": 132,
          "services": [],
          "startOrder": 127,
          "version": "10.10-HF28",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.convert.plugins\">\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n    point=\"converter\">\n\n    <converter name=\"pdf2text\" class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">pdftotext</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"xml2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XML2TextConverter\">\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>application/xml</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"html2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.Html2TextConverter\">\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/xhtml</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"md2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.MD2TextConverter\">\n      <sourceMimeType>text/x-web-markdown</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"xl2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XL2TextConverter\">\n      <sourceMimeType>application/vnd.ms-excel</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"xlx2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XLX2TextConverter\">\n      <sourceMimeType>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n       <parameter name=\"MAX_SIZE\">3145728</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"msoffice2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.MSOffice2TextConverter\">\n      <sourceMimeType>application/msword</sourceMimeType>\n      <sourceMimeType>application/vnd.ms-powerpoint</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"rtf2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.RTF2TextConverter\">\n      <sourceMimeType>application/rtf</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"docx2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.DOCX2TextConverter\">\n      <sourceMimeType>application/vnd.openxmlformats-officedocument.wordprocessingml.document</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"pptx2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.PPTX2TextConverter\">\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"oo2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.OOo2TextConverter\">\n      <sourceMimeType>application/vnd.sun.xml.impress</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.impress.template</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation-template\n      </sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc.template</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.spreadsheet\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.spreadsheet-template\n      </sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"rfc822totext\"\n      class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.RFC822ToTextConverter\">\n      <destinationMimeType>text/plain</destinationMimeType>\n      <sourceMimeType>message/rfc822</sourceMimeType>\n    </converter>\n\n    <converter name=\"any2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.FullTextConverter\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\" name=\"ps2pdf\">\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <sourceMimeType>application/eps</sourceMimeType>\n      <sourceMimeType>application/x-eps</sourceMimeType>\n      <sourceMimeType>image/eps</sourceMimeType>\n      <sourceMimeType>image/x-eps</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <destinationMimeType>application/pdf</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ps2pdf</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"ps2pdf2text\">\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <sourceMimeType>application/eps</sourceMimeType>\n      <sourceMimeType>application/x-eps</sourceMimeType>\n      <sourceMimeType>image/eps</sourceMimeType>\n      <sourceMimeType>image/x-eps</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <conversionSteps>\n        <subconverter>ps2pdf</subconverter>\n        <subconverter>pdf2text</subconverter>\n      </conversionSteps>\n    </converter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/convert-service-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--command",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.plugins/org.nuxeo.ecm.platform.convert.commandline.pdf2text/Contributions/org.nuxeo.ecm.platform.convert.commandline.pdf2text--command",
              "id": "org.nuxeo.ecm.platform.convert.commandline.pdf2text--command",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "10.10-HF28",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n\n    <command enabled=\"true\" name=\"pdftotext\">\n      <commandLine>pdftotext</commandLine>\n      <parameterString>-enc UTF-8 #{sourceFilePath} #{targetFilePath}</parameterString>\n      <winParameterString>-enc UTF-8 #{sourceFilePath} #{targetFilePath}</winParameterString>\n      <installationDirective>You need to install pdftotext.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"ps2pdf\">\n      <commandLine>gs</commandLine>\n      <winCommand>gswin64c</winCommand>\n      <parameterString>-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dEPSFitPage -sOutputFile=#{targetFilePath}\n        #{sourceFilePath}</parameterString>\n      <installationDirective>You need to install GhostScript.</installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.plugins/org.nuxeo.ecm.platform.convert.commandline.pdf2text",
          "name": "org.nuxeo.ecm.platform.convert.commandline.pdf2text",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 313,
          "services": [],
          "startOrder": 330,
          "version": "10.10-HF28",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.convert.commandline.pdf2text\">\n\n  <require>org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib</require>\n  <extension target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\" point=\"command\">\n\n    <command name=\"pdftotext\" enabled=\"true\">\n      <commandLine>pdftotext</commandLine>\n      <parameterString>-enc UTF-8 #{sourceFilePath} #{targetFilePath}</parameterString>\n      <winParameterString>-enc UTF-8 #{sourceFilePath} #{targetFilePath}</winParameterString>\n      <installationDirective>You need to install pdftotext.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"ps2pdf\">\n      <commandLine>gs</commandLine>\n      <winCommand>gswin64c</winCommand>\n      <parameterString>-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dEPSFitPage -sOutputFile=#{targetFilePath}\n        #{sourceFilePath}</parameterString>\n      <installationDirective>You need to install GhostScript.</installationDirective>\n    </command>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/commandline-pdf2text-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-convert-plugins-10.10-HF28.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.plugins",
      "id": "org.nuxeo.ecm.core.convert.plugins",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_222\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nExport-Package: org.nuxeo.ecm.core.convert.plugins.text.extractors\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core\r\nBundle-Name: org.nuxeo.ecm.core.convert.plugins\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nNuxeo-Component: OSGI-INF/convert-service-contrib.xml,OSGI-INF/command\r\n line-pdf2text-contrib.xml\r\nImport-Package: javax.mail,javax.mail.internet,javax.xml.parsers,javax\r\n .xml.transform,javax.xml.transform.sax,org.apache.commons.logging,org\r\n .apache.poi,org.apache.poi.extractor,org.apache.poi.hslf.extractor,or\r\n g.apache.poi.hssf.usermodel,org.apache.poi.hwpf.extractor,org.apache.\r\n poi.openxml4j.opc,org.apache.poi.poifs.filesystem,org.apache.poi.ss.u\r\n sermodel,org.apache.poi.xssf.usermodel,org.apache.xerces.parsers,org.\r\n apache.xerces.xni,org.apache.xerces.xni.parser,org.apache.xmlbeans,or\r\n g.cyberneko.html,org.nuxeo.common.utils,org.nuxeo.ecm.core.api,org.nu\r\n xeo.ecm.core.api.blobholder,org.nuxeo.ecm.core.api.impl.blob,org.nuxe\r\n o.ecm.core.convert.api,org.nuxeo.ecm.core.convert.cache,org.nuxeo.ecm\r\n .core.convert.extension,org.nuxeo.runtime.api,org.pdfbox.pdmodel,org.\r\n pdfbox.pdmodel.encryption,org.pdfbox.util,org.xml.sax,org.xml.sax.hel\r\n pers\r\nBundle-SymbolicName: org.nuxeo.ecm.core.convert.plugins;singleton=true\r\n\r\n",
      "maxResolutionOrder": 313,
      "minResolutionOrder": 132,
      "packages": [
        "nuxeo-10.10-HF02",
        "nuxeo-10.10-HF03",
        "nuxeo-10.10-HF28"
      ],
      "requirements": [],
      "version": "10.10-HF28"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-invite",
      "artifactVersion": "10.10-HF20",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.user.center",
          "org.nuxeo.ecm.user.center.dashboard",
          "org.nuxeo.ecm.user.center.dashboard.jsf",
          "org.nuxeo.ecm.user.center.notification",
          "org.nuxeo.ecm.user.center.oauth",
          "org.nuxeo.ecm.user.center.profile",
          "org.nuxeo.ecm.user.center.profile.jsf",
          "org.nuxeo.ecm.user.invite",
          "org.nuxeo.ecm.user.registration",
          "org.nuxeo.ecm.user.registration.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user",
        "id": "grp:org.nuxeo.ecm.user",
        "name": "org.nuxeo.ecm.user",
        "parentIds": [
          "grp:org.nuxeo.ecm.platform"
        ],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "# Nuxeo User Center\n\nThis addon adds a Home for every user.\n\n# Building\n\n    mvn clean install\n\n## Deploying\n\nCopy the built artifacts into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\nYou should then have 'My Personal Space' link that will take you to your new Home :-)\n\n## QA results\n\n[![Build Status](https://qa.nuxeo.org/jenkins/buildStatus/icon?job=addons_nuxeo-user-center-master)](https://qa.nuxeo.org/jenkins/job/addons_nuxeo-user-center-master/)\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.",
            "digest": "4a9fd28ec7f17f901cf207b1f03e6778",
            "encoding": "UTF-8",
            "length": 1161,
            "mimeType": "text/plain",
            "name": "README.md"
          },
          {
            "blobProviderId": "default",
            "content": "# Nuxeo User Registration\n\nThis addon provides a way to invite external user into Nuxeo, and may add them some permission on a Document.\n\n# Building\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Platform User Registration Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-platform-user-registration).\nOr manually copy the built artifacts into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\n## QA results\n\n[![Build Status](https://qa.nuxeo.org/jenkins/buildStatus/icon?job=addons_nuxeo-platform-user-registration-master)](https://qa.nuxeo.org/jenkins/job/addons_nuxeo-platform-user-registration-master/)\n\n# About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
            "digest": "273911f6ad5df57056e5e4740ffbd30a",
            "encoding": "UTF-8",
            "length": 1353,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "10.10"
      },
      "bundleId": "org.nuxeo.ecm.user.invite",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.adapter.contrib/Contributions/org.nuxeo.ecm.user.invite.adapter.contrib--adapters",
              "id": "org.nuxeo.ecm.user.invite.adapter.contrib--adapters",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.user.invite.RegistrationRules\" factory=\"org.nuxeo.ecm.user.invite.RegistrationRulesFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.adapter.contrib",
          "name": "org.nuxeo.ecm.user.invite.adapter.contrib",
          "requirements": [],
          "resolutionOrder": 209,
          "services": [],
          "startOrder": 670,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.invite.adapter.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.user.invite.RegistrationRules\"\n             factory=\"org.nuxeo.ecm.user.invite.RegistrationRulesFactory\"/>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-registration-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.types.contrib/Contributions/org.nuxeo.ecm.user.invite.core.types.contrib--schema",
              "id": "org.nuxeo.ecm.user.invite.core.types.contrib--schema",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"registration\" prefix=\"registration\" src=\"schemas/registration.xsd\"/>\n    <schema name=\"userinfo\" prefix=\"userinfo\" src=\"schemas/userinfo.xsd\"/>\n    <schema name=\"registrationconfiguration\" prefix=\"registrationconfiguration\" src=\"schemas/registrationconfiguration.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.types.contrib/Contributions/org.nuxeo.ecm.user.invite.core.types.contrib--doctype",
              "id": "org.nuxeo.ecm.user.invite.core.types.contrib--doctype",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"UserInvitation\">\n      <schema name=\"userinfo\"/>\n      <schema name=\"registration\"/>\n    </facet>\n    \n    <facet name=\"RegistrationConfiguration\">\n      <schema name=\"registrationconfiguration\"/>\n    </facet>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.types.contrib",
          "name": "org.nuxeo.ecm.user.invite.core.types.contrib",
          "requirements": [],
          "resolutionOrder": 210,
          "services": [],
          "startOrder": 672,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.invite.core.types.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n             point=\"schema\">\n    <schema name=\"registration\" src=\"schemas/registration.xsd\"\n            prefix=\"registration\"/>\n    <schema name=\"userinfo\" src=\"schemas/userinfo.xsd\"\n            prefix=\"userinfo\"/>\n    <schema name=\"registrationconfiguration\" src=\"schemas/registrationconfiguration.xsd\"\n            prefix=\"registrationconfiguration\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <facet name=\"UserInvitation\">\n      <schema name=\"userinfo\"/>\n      <schema name=\"registration\"/>\n    </facet>\n    \n    <facet name=\"RegistrationConfiguration\">\n      <schema name=\"registrationconfiguration\"/>\n    </facet>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-registration-core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.service.contrib/Contributions/org.nuxeo.ecm.user.invite.core.service.contrib--doctype",
              "id": "org.nuxeo.ecm.user.invite.core.service.contrib--doctype",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <doctype extends=\"File\" name=\"UserInvitation\">\n      <facet name=\"UserInvitation\"/>\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n    <doctype extends=\"Workspace\" name=\"UserInvitationContainer\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.service.contrib/Contributions/org.nuxeo.ecm.user.invite.core.service.contrib--types",
              "id": "org.nuxeo.ecm.user.invite.core.service.contrib--types",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"UserInvitationContainer\">default&gt;</type>\n      <type name=\"UserInvitation\">registrationRequest</type>\n    </types>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.user.invite.UserInvitationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.service.contrib/Contributions/org.nuxeo.ecm.user.invite.core.service.contrib--configuration",
              "id": "org.nuxeo.ecm.user.invite.core.service.contrib--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.user.invite.UserInvitationService",
                "name": "org.nuxeo.ecm.user.invite.UserInvitationService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"configuration\" target=\"org.nuxeo.ecm.user.invite.UserInvitationService\">\n    <configuration>\n      <requestDocType>UserInvitation</requestDocType>\n      <container>\n        <docType>UserInvitationContainer</docType>\n        <parentPath>/management/</parentPath>\n        <name>invitationRequests</name>\n        <title>Invitation Requests Container</title>\n      </container>\n      <validationEmail>\n        <title>Hi ${userinfo.firstName} ${userinfo.lastName}! You are invited to access ${productName}</title>\n        <template>skin/views/userRegistration/ValidationEmailTemplate.ftl</template>\n      </validationEmail>\n      <reviveEmail>\n        <title>You are invited to access Nuxeo</title>\n        <template>skin/views/userRegistration/ReviveEmailTemplate.ftl</template>\n      </reviveEmail>\n      <enterPasswordUrl>site/userInvitation/enterpassword/</enterPasswordUrl>\n      <validationRelUrl>site/userInvitation/validate</validationRelUrl>\n    </configuration>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.service.contrib/Contributions/org.nuxeo.ecm.user.invite.core.service.contrib--event",
              "id": "org.nuxeo.ecm.user.invite.core.service.contrib--event",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\">\n    <event name=\"registrationSubmitted\"/>\n    <event name=\"registrationAccepted\"/>\n    <event name=\"registrationValidated\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.service.contrib",
          "name": "org.nuxeo.ecm.user.invite.core.service.contrib",
          "requirements": [
            "org.nuxeo.ecm.user.invite.core.types.contrib"
          ],
          "resolutionOrder": 211,
          "services": [],
          "startOrder": 671,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.user.invite.core.service.contrib\">\n\n  <require>org.nuxeo.ecm.user.invite.core.types.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <doctype name=\"UserInvitation\" extends=\"File\">\n      <facet name=\"UserInvitation\"/>\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n    <doctype name=\"UserInvitationContainer\" extends=\"Workspace\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"types\">\n    <types>\n      <type name=\"UserInvitationContainer\">default></type>\n      <type name=\"UserInvitation\">registrationRequest</type>\n    </types>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.user.invite.UserInvitationService\" point=\"configuration\">\n    <configuration>\n      <requestDocType>UserInvitation</requestDocType>\n      <container>\n        <docType>UserInvitationContainer</docType>\n        <parentPath>/management/</parentPath>\n        <name>invitationRequests</name>\n        <title>Invitation Requests Container</title>\n      </container>\n      <validationEmail>\n        <title>Hi ${userinfo.firstName} ${userinfo.lastName}! You are invited to access ${productName}</title>\n        <template>skin/views/userRegistration/ValidationEmailTemplate.ftl</template>\n      </validationEmail>\n      <reviveEmail>\n        <title>You are invited to access Nuxeo</title>\n        <template>skin/views/userRegistration/ReviveEmailTemplate.ftl</template>\n      </reviveEmail>\n      <enterPasswordUrl>site/userInvitation/enterpassword/</enterPasswordUrl>\n      <validationRelUrl>site/userInvitation/validate</validationRelUrl>\n    </configuration>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.audit.service.NXAuditEventsService\" point=\"event\">\n    <event name=\"registrationSubmitted\"/>\n    <event name=\"registrationAccepted\"/>\n    <event name=\"registrationValidated\"/>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/user-registration-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.user.invite.UserInvitationComponent",
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.user.invite.UserInvitationService",
              "descriptors": [
                "org.nuxeo.ecm.user.invite.UserRegistrationConfiguration"
              ],
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.UserInvitationService/ExtensionPoints/org.nuxeo.ecm.user.invite.UserInvitationService--configuration",
              "id": "org.nuxeo.ecm.user.invite.UserInvitationService--configuration",
              "label": "configuration (org.nuxeo.ecm.user.invite.UserInvitationService)",
              "name": "configuration",
              "version": "10.10-HF20"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.UserInvitationService",
          "name": "org.nuxeo.ecm.user.invite.UserInvitationService",
          "requirements": [],
          "resolutionOrder": 212,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.user.invite.UserInvitationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.UserInvitationService/Services/org.nuxeo.ecm.user.invite.UserInvitationService",
              "id": "org.nuxeo.ecm.user.invite.UserInvitationService",
              "overriden": false,
              "version": "10.10-HF20"
            }
          ],
          "startOrder": 948,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.invite.UserInvitationService\">\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.user.invite.UserInvitationService\"/>\n  </service>\n\n  <implementation\n      class=\"org.nuxeo.ecm.user.invite.UserInvitationComponent\"/>\n\n  <extension-point name=\"configuration\">\n    <object class=\"org.nuxeo.ecm.user.invite.UserRegistrationConfiguration\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-registration-service-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.registration.lifecycle.contrib/Contributions/org.nuxeo.ecm.user.registration.lifecycle.contrib--lifecycle",
              "id": "org.nuxeo.ecm.user.registration.lifecycle.contrib--lifecycle",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "10.10-HF20",
              "xml": "<extension point=\"lifecycle\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n    <lifecycle defaultInitial=\"created\" name=\"registrationRequest\">\n      <transitions>\n        <transition destinationState=\"approved\" name=\"approve\">\n          <description>Approve the registration request</description>\n        </transition>\n        <transition destinationState=\"rejected\" name=\"reject\">\n          <description>Reject the registration request</description>\n        </transition>\n        <transition destinationState=\"accepted\" name=\"accept\">\n          <description>Accept the registration request</description>\n        </transition>\n        <transition destinationState=\"processed\" name=\"process\">\n          <description>Process the registration request</description>\n        </transition>\n      </transitions>\n      <states>\n        <state description=\"Default state\" initial=\"true\" name=\"created\">\n          <transitions>\n            <transition>approve</transition>\n            <transition>reject</transition>\n          </transitions>\n        </state>\n        <state description=\"Registration has been approved\" name=\"approved\">\n          <transitions>\n            <transition>accept</transition>\n          </transitions>\n        </state>\n        <state description=\"Registration has been rejected\" name=\"rejected\">\n          <transitions/>\n        </state>\n        <state description=\"Registration has been accepted\" name=\"accepted\">\n          <transitions>\n            <transition>process</transition>\n          </transitions>\n        </state>\n        <state description=\"Registration request has been processed\" name=\"processed\">\n          <transitions/>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.registration.lifecycle.contrib",
          "name": "org.nuxeo.ecm.user.registration.lifecycle.contrib",
          "requirements": [],
          "resolutionOrder": 213,
          "services": [],
          "startOrder": 679,
          "version": "10.10-HF20",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.registration.lifecycle.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n             point=\"lifecycle\">\n\n    <lifecycle name=\"registrationRequest\" defaultInitial=\"created\">\n      <transitions>\n        <transition name=\"approve\" destinationState=\"approved\">\n          <description>Approve the registration request</description>\n        </transition>\n        <transition name=\"reject\" destinationState=\"rejected\">\n          <description>Reject the registration request</description>\n        </transition>\n        <transition name=\"accept\" destinationState=\"accepted\">\n          <description>Accept the registration request</description>\n        </transition>\n        <transition name=\"process\" destinationState=\"processed\">\n          <description>Process the registration request</description>\n        </transition>\n      </transitions>\n      <states>\n        <state name=\"created\" description=\"Default state\" initial=\"true\">\n          <transitions>\n            <transition>approve</transition>\n            <transition>reject</transition>\n          </transitions>\n        </state>\n        <state name=\"approved\" description=\"Registration has been approved\">\n          <transitions>\n            <transition>accept</transition>\n          </transitions>\n        </state>\n        <state name=\"rejected\" description=\"Registration has been rejected\">\n          <transitions></transitions>\n        </state>\n        <state name=\"accepted\" description=\"Registration has been accepted\">\n          <transitions>\n            <transition>process</transition>\n          </transitions>\n        </state>\n        <state name=\"processed\" description=\"Registration request has been processed\">\n          <transitions></transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-registration-lifecycle-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-invite-10.10-HF20.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite",
      "id": "org.nuxeo.ecm.user.invite",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_222\r\nBundle-ManifestVersion: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo User Invite\r\nBundle-SymbolicName: org.nuxeo.ecm.user.invite;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/user-registration-adapter-contrib.xml,OSGI-I\r\n NF/user-registration-contrib.xml,OSGI-INF/user-registration-core-type\r\n s-contrib.xml,OSGI-INF/user-registration-service-framework.xml,OSGI-I\r\n NF/user-registration-lifecycle-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 213,
      "minResolutionOrder": 209,
      "packages": [
        "nuxeo-10.10-HF03",
        "nuxeo-10.10-HF05",
        "nuxeo-10.10-HF06",
        "nuxeo-10.10-HF14",
        "nuxeo-10.10-HF20"
      ],
      "requirements": [],
      "version": "10.10-HF20"
    }
  ],
  "creationDate": 1664793571025,
  "key": "Nuxeo Platform LTS 2019-10.10",
  "name": "Nuxeo Platform LTS 2019",
  "operations": [],
  "packages": [
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.core.convert",
        "org.nuxeo.ecm.core.convert.api",
        "org.nuxeo.ecm.core.convert.plugins",
        "org.nuxeo.diff.content",
        "org.nuxeo.elasticsearch.core",
        "org.nuxeo.ecm.user.invite",
        "org.nuxeo.ecm.platform.audit",
        "org.nuxeo.web.ui"
      ],
      "conflicts": [],
      "dependencies": [
        "nuxeo-10.10-HF02:1.0.0"
      ],
      "hierarchyPath": "/nuxeo-10.10-HF03-1.0.0",
      "id": "nuxeo-10.10-HF03-1.0.0",
      "name": "nuxeo-10.10-HF03",
      "optionalDependencies": [],
      "packageType": "hotfix",
      "title": "Nuxeo 10.10-HF03",
      "version": "1.0.0"
    }
  ],
  "pluginSnapshots": {},
  "releaseDate": 1547942400000,
  "version": "10.10"
}